c# - সে আমার সম্পদ নয় সম্পত্তি




C#3.0+ এ সম্পত্তি এবং ক্ষেত্রের মধ্যে পার্থক্য (7)

আমি মনে করি এটি একটি সদৃশ বলে মনে হচ্ছে C # একটি ক্ষেত্র এবং একটি সম্পত্তি মধ্যে পার্থক্য কি? কিন্তু আমার প্রশ্ন সামান্য পার্থক্য আছে (আমার দৃষ্টিকোণ থেকে):

একবার আমি জানি যে

  • আমি আমার ক্লাস ব্যবহার করব না "এমন কৌশল যা শুধুমাত্র সম্পত্তিগুলিতে কাজ করে" এবং
  • আমি গেট্টার / সেট্টারের বৈধতা কোড ব্যবহার করব না।

কোনও পার্থক্য আছে (শৈলী / ভবিষ্যতের বিকাশের ছাড়া), সম্পত্তি নির্ধারণে কোন ধরণের নিয়ন্ত্রণের মতো?

এর মধ্যে কোন অতিরিক্ত পার্থক্য আছে:

public string MyString { get; set; }

এবং

public string myString;

(আমি সচেতন যে প্রথম সংস্করণটি C # 3.0 বা তার উপরে প্রয়োজন এবং কম্পাইলারটি ব্যক্তিগত ক্ষেত্র তৈরি করে।)


Encapsulation।

দ্বিতীয় উদাহরণে আপনি শুধু একটি পরিবর্তনশীল সংজ্ঞায়িত করেছেন, প্রথমে, পরিবর্তনশীলের চারপাশে একটি গেট্টার / সেট্টার রয়েছে। সুতরাং আপনি যদি পরবর্তী তারিখে পরিবর্তনশীল যাচাই করতে চান তবে সিদ্ধান্ত নিন - এটি অনেক সহজ হবে।

প্লাস তারা Intellisense মধ্যে ভিন্নভাবে প্রদর্শন :)

সম্পাদনা করুন: অপারেটিং সিস্টেম আপডেট আপডেটের জন্য আপডেট - যদি আপনি এখানে অন্য পরামর্শগুলি উপেক্ষা করতে চান তবে অন্য কারণটি হল এটি কেবলমাত্র ওও নকশাকার নয়। এবং যদি আপনার এটি করার জন্য খুব ভাল কারণ না থাকে তবে সর্বদা একটি সর্বজনীন পরিবর্তনশীল / ক্ষেত্রের উপর একটি সম্পত্তি নির্বাচন করুন।


অন্যান্য উত্তর এবং উদাহরণগুলির মধ্যে, আমি মনে করি এই উদাহরণটি কিছু পরিস্থিতিতে দরকারী।

উদাহরণস্বরূপ বলা যাক যে আপনার একটি OnChange property যেমন:

public Action OnChange { get; set; }

আপনি যদি এটি পরিবর্তন করতে চান তার চেয়ে প্রতিনিধিদের ব্যবহার করতে চান তবে এই field পরিবর্তন করুন:

public event Action OnChange = delegate {};

এই পরিস্থিতিতে আমরা অবাঞ্ছিত অ্যাক্সেস বা পরিবর্তন থেকে আমাদের ক্ষেত্র রক্ষা।


আপনি সর্বদা কোনও পাবলিক ফিল্ডের ক্ষেত্রে ক্ষেত্রগুলির পরিবর্তে বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন। এটি নিশ্চিত করে যে আপনার লাইব্রেরিতে ভবিষ্যতে যদি কোনও ক্ষেত্রের জন্য ইনক্যাপুলেশন বাস্তবায়ন করার ক্ষমতা থাকে তবে ভবিষ্যতে যদি বিদ্যমান কোডগুলি ভাঙ্গার প্রয়োজন হয়। যদি আপনি বিদ্যমান লাইব্রেরিগুলির বৈশিষ্ট্যগুলির সাথে ক্ষেত্রগুলি প্রতিস্থাপন করেন তবে সমস্ত আপনার লাইব্রেরি ব্যবহার করে নির্ভরশীল মডিউল পুনর্নির্মিত করা প্রয়োজন।


একটি দম্পতি দ্রুত, সুস্পষ্ট পার্থক্য

  1. একটি সম্পত্তি অ্যাক্সেসর কীওয়ার্ড থাকতে পারে।

    public string MyString { get; private set; }
  2. একটি সম্পত্তি উত্তরাধিকারী overridden করা যেতে পারে।

    public virtual string MyString { get; protected set; }

ক্ষেত্র এবং বৈশিষ্ট্য মধ্যে অন্য একটি গুরুত্বপূর্ণ পার্থক্য আছে।

WPF ব্যবহার করার সময়, আপনি শুধুমাত্র পাবলিক বৈশিষ্ট্য আবদ্ধ করতে পারেন। একটি পাবলিক ক্ষেত্রের বাঁধাই কাজ করবে নাINotifyPropertyChanged হলেও এটি সত্য নয় (যদিও আপনি সর্বদা হওয়া উচিত)।


প্রথমটি:

public string MyString {get; set; }

একটি সম্পত্তি হয়; দ্বিতীয় এক ( public string MyString ) একটি ক্ষেত্র নির্দেশ করে।

পার্থক্য হল, যে নির্দিষ্ট কৌশল (উদাহরণস্বরূপ ASP.NET ডেটাবেসিং) শুধুমাত্র ক্ষেত্রগুলিতে নয়, বৈশিষ্ট্যগুলিতে কাজ করে। এক্সএমএল সিরিয়ালাইজেশনের জন্য একই সত্য: শুধুমাত্র বৈশিষ্ট্য সিরিয়ালাইজড হয়, ক্ষেত্রগুলি সিরিয়ালাইজড হয় না।


মৌলিক পার্থক্য হল একটি ক্ষেত্র মেমরি একটি অবস্থান যেখানে নির্দিষ্ট ধরনের তথ্য সংরক্ষণ করা হয়। একটি সম্পত্তি কোডের এক বা দুটি ইউনিট প্রতিনিধিত্ব করে যা নির্দিষ্ট টাইপের মান পুনরুদ্ধার বা সেট করার জন্য কার্যকর করা হয়। এই অ্যাক্সেসার পদ্ধতিগুলির ব্যবহারটি এমন একটি সদস্য ব্যবহার করে সিনট্যাক্টিক লুকানো থাকে যা একটি ক্ষেত্রের মতো আচরণ করে বলে মনে হয় (এটি একটি অ্যাসাইনমেন্ট ক্রিয়াকলাপের উভয় পাশে উপস্থিত হতে পারে)।





automatic-properties