সিএলআর ভায়ার সি # এর দুর্দান্ত বইতে জেফ্রি রিখটার বলেছিলেন যে তিনি সম্পত্তি পছন্দ করেন না এবং সেগুলি ব্যবহার না করার পরামর্শ দেন। তিনি কিছু কারণ দিয়েছেন, কিন্তু আমি আসলে বুঝতে পারি না। আমাকে সম্পত্তি কেন ব্যবহার করা উচিত বা করা উচিত নয় তা আমাকে কেউ ব্যাখ্যা করতে পারেন? সি # 3.0 এ, স্বয়ংক্রিয় বৈশিষ্ট্য সহ, এই পরিবর্তন হয়?
একটি রেফারেন্স হিসাবে, আমি জেফ্রি রিখটারের মতামতগুলি যুক্ত করেছি:
Property একটি সম্পত্তি কেবল পঠনযোগ্য বা কেবল লেখার জন্য হতে পারে; ক্ষেত্রের অ্যাক্সেস সর্বদা পঠনযোগ্য এবং লিখনযোগ্য। আপনি যদি কোনও সম্পত্তি সংজ্ঞায়িত করেন তবে গেম এবং সেট অ্যাকসেসর পদ্ধতি উভয়ই দেওয়া ভাল।
Property একটি সম্পত্তি পদ্ধতি একটি ব্যতিক্রম নিক্ষেপ করতে পারে; ক্ষেত্রের অ্যাক্সেস কখনই ব্যতিক্রম ছুঁড়ে না ফেলে।
• সম্পত্তি কোনও পদ্ধতিতে আউট বা রেফ প্যারামিটার হিসাবে পাস করা যায় না; একটি ক্ষেত্র পারেন। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি সংকলন করবে না:
using System;
public sealed class SomeType
{
private static String Name
{
get { return null; }
set {}
}
static void MethodWithOutParam(out String n) { n = null; }
public static void Main()
{
// For the line of code below, the C# compiler emits the following:
// error CS0206: A property or indexer may not
// be passed as an out or ref parameter
MethodWithOutParam(out Name);
}
}
Property একটি সম্পত্তি পদ্ধতি কার্যকর করতে দীর্ঘ সময় নিতে পারে; ক্ষেত্রের অ্যাক্সেস সর্বদা অবিলম্বে সম্পূর্ণ হয়। বৈশিষ্ট্যগুলি ব্যবহারের একটি সাধারণ কারণ হ'ল থ্রেড সিঙ্ক্রোনাইজেশন করা, যা থ্রেডটি চিরতরে বন্ধ করে দিতে পারে এবং তাই থ্রেড সিঙ্ক্রোনাইজেশন প্রয়োজন হলে কোনও সম্পত্তি ব্যবহার করা উচিত নয়। এই পরিস্থিতিতে, একটি পদ্ধতি পছন্দ করা হয়। এছাড়াও, যদি আপনার ক্লাসটি দূর থেকে অ্যাক্সেস করা যায় (উদাহরণস্বরূপ, আপনার ক্লাসটি সিস্টেম থেকে প্রাপ্ত। আমার মতে, মার্শালবাইরফঅবজেক্ট থেকে প্রাপ্ত ক্লাসগুলির কখনই বৈশিষ্ট্য ব্যবহার করা উচিত নয়।
A একটানা একাধিক বার বলা হয়ে থাকে, সম্পত্তি সম্পত্তি প্রতিটি সময় একটি পৃথক মান ফিরে আসতে পারে; একটি ক্ষেত্র প্রতিটি সময় একই মান প্রদান করে। সিস্টেম.ডেটটাইম শ্রেণিতে একটি পঠনযোগ্য এখন সম্পত্তি রয়েছে যা বর্তমান তারিখ এবং সময়কে দেয়। প্রতিবার আপনি এই সম্পত্তিটি জিজ্ঞাসা করবেন, এটি একটি পৃথক মান প্রদান করবে। এটি একটি ভুল, এবং মাইক্রোসফ্ট আশা করে যে তারা কোনও সম্পত্তির পরিবর্তে নাওকে একটি পদ্ধতি তৈরি করে ক্লাসটি ঠিক করতে পারে।
Property একটি সম্পত্তি পদ্ধতি পর্যবেক্ষণযোগ্য পার্শ্ব প্রতিক্রিয়া হতে পারে; ক্ষেত্র অ্যাক্সেস কখনও না। অন্য কথায়, কোনও ধরণের ব্যবহারকারীর পক্ষে প্রকারের কোনও ভিন্ন আচরণ বিবেচনা না করে তিনি বাছাই করা কোনও ক্রমের দ্বারা নির্ধারিত বিভিন্ন বৈশিষ্ট্য নির্ধারণ করতে সক্ষম হওয়া উচিত।
Property কোনও সম্পত্তি পদ্ধতির জন্য অতিরিক্ত মেমরির প্রয়োজন হতে পারে বা এমন কোনও জিনিসের রেফারেন্স ফিরে আসতে পারে যা আসলে বস্তুর রাজ্যের অংশ নয়, সুতরাং প্রত্যাবর্তিত বস্তুকে সংশোধন করা মূল বস্তুর উপর কোনও প্রভাব ফেলবে না; ক্ষেত্রটি জিজ্ঞাসা করা সর্বদা কোনও অবজেক্টের রেফারেন্স দেয় যা মূল বস্তুর অবস্থার অংশ হিসাবে গ্যারান্টিযুক্ত। কোনও অনুলিপি প্রদান করে এমন কোনও সম্পত্তি নিয়ে কাজ করা বিকাশকারীদের কাছে খুব বিভ্রান্তিকর হতে পারে এবং এই বৈশিষ্ট্যটি প্রায়শই নথিভুক্ত হয় না।