সি #: গেটর / সেটার


109

আমি কোথাও নীচের মতো কিছু দেখেছি এবং ভাবছিলাম এর অর্থ কী। আমি জানি যে তারা গ্রাহক এবং সেটটার, তবে কেন স্ট্রিং প্রকারটি এভাবে সংজ্ঞায়িত করা হয়েছে তা জানতে চাই। আমাকে সাহায্য করার জন্য ধন্যবাদ.

public string Type { get; set; }


4
এটিকে একটি অটো-প্রপার্টি বলা হয়, এটি একবার দেখুন: msdn.microsoft.com/en-us/library/bb384054.aspx
Allov

এটি একটি নামের নামের সংজ্ঞা "Type", যার NET প্রকার System.string। এটির আর কিছুই নেই।
জন

2
আমি মনে করি যে তিনি হয়তো অটো-প্রপার্টিটির নামকরণকে প্রতিবিম্ব ক্লাস সিস্টেমের সাথে বিভ্রান্ত করছেন। টাইপ। msdn.microsoft.com/en-us/library/system.type.aspx
eandersson

উত্তর:


178

সেগুলি হ'ল অটো-ইমপ্লিমেন্ট প্রোপার্টি (সংক্ষেপে অটো প্রোপার্টি)।

সংকলকটি নিম্নলিখিত সাধারণ প্রয়োগের সমতুল্য স্বয়ংক্রিয়ভাবে উত্পন্ন করবে:

private string _type;

public string Type
{
    get { return _type; }
    set { _type = value; }
}

2
@ বার্লপ কেউ গুগল থেকে আসছেন, কোনও ক্লু নেই, কী আপডেট করতে হবে? এম হাসান আপনার উত্তরটির অর্থ কি? ধন্যবাদ।
এথেনোসিটি

1
@ আথেনোসিটি রিট্রোস্পেক্টে আমি মনে করি এটি ঠিক আছে .. আমি গেটর সেটারের উদাহরণগুলিতে থিংইনিগ ছিলাম। প্রশ্নকারীর গেটর সেটারের একটি বৈধ কেস রয়েছে যা অনেক বেশি সংযোগযুক্ত (এক লাইনার হিসাবে / কোনও দ্বিতীয় ক্ষেত্রের প্রয়োজন নেই) .. আপনি public int b { get { return b * 2; } } প্রয়োজনীয় দ্বিতীয় কোনও ক্ষেত্রও লিখতে পারবেন না। তবে আমি মনে করি যখন আপনার কোনও দেহ নিয়ে সেটার থাকবে তখন আপনার দ্বিতীয় ক্ষেত্রের প্রয়োজন। এবং এটি একটি শরীরের সাথে একটি সেটার দেখায়। যদিও এটি প্রশ্নকর্তার এক লাইনারের মতো করে।
বার্লপ

2
@ অ্যাথেনোসিটি সি # 7ও রয়েছে যার মাধ্যমে নিশ্চিত হওয়া যায় যে সেটারের দেহ থাকলে আপনার এখনও দ্বিতীয় ক্ষেত্রের প্রয়োজন হয় তবে এটির =>বাক্য গঠন এবং কোনও রিটার্ন কীওয়ার্ড নেই। যদিও এটি আমার মনে ছিল না। আমার দ্বিতীয় ক্ষেত্রটি অপ্রয়োজনীয় হওয়ার কথা মনে ছিল, যদিও আমি খুঁজে পেয়েছি যে কখনও কখনও দ্বিতীয় ক্ষেত্রটি প্রয়োজনীয়। উদাহরণস্বরূপ এখানে দ্বিতীয় ক্ষেত্রটি প্রয়োজনীয় নয় ('কোনও দেহবিহীন কোনও ডিফল্ট সেটার এটি করবে না), তবে উত্তরদাতাকে এটি (সেটার বডি এবং দ্বিতীয় ক্ষেত্র) স্থাপন করছিল, প্রশ্নকারীকে না করে তাদের লাইনটি ব্যাখ্যা করার জন্য দ্বিতীয় ক্ষেত্রটি করছিল।
বারলপ

33

এটি একটি স্ব-সম্পত্তি এবং এটি এর জন্য স্বল্প সংকেত:

private string type;
public string Type
{
  get { return this.type; }
  set { this.type = value; }
}

4
... ব্যাকিং ফিল্ডটি অ্যাক্সেসযোগ্য নয়।
ভ্লাদ

7
... এ কারণেই এটিকে ব্যাকিং ফিল্ড বলা হয় ।
তেওমন সায়গুল

5
তবুও, আপনি এটি <Type>k__BackingFieldপ্রতিচ্ছবি হিসাবে দেখতে সক্ষম হওয়া উচিত ।
ভ্লাদ

25

সি # 6 এ:

এখন কেবল ক্ষেত্র হিসাবে অটো-বৈশিষ্ট্যগুলি ঘোষণা করা সম্ভব:

public string FirstName { get; set; } = "Ropert";

কেবল পঠনযোগ্য অটো-সম্পত্তি

public string FirstName { get;} = "Ropert";



5

এটি একটি স্বয়ংক্রিয়ভাবে সমর্থিত সম্পত্তি, মূলত সমান

private string type;
public string Type
{
   get{ return type; }
   set{ type = value; }
}

4

এগুলিকে অটো বৈশিষ্ট্য বলা হয়।

http://msdn.microsoft.com/en-us/library/bb384054.aspx

কার্যকরীভাবে (এবং সংকলিত আইএল শর্তাবলী), তারা সমর্থন ক্ষেত্রের সম্পত্তি হিসাবে একই।


1
আপনি এখনও শ্রেণীর মধ্যে প্রাইভেট _ টাইপ বা টাইপ উল্লেখ করতে পারেন, বা আপনি কেবল টাইপ ব্যবহার করেন?
মাইকি

2
না, তবে আপনি অটো সম্পত্তিটির জন্য পরিবর্তনকারী নির্দিষ্ট করতে পারেন: পাবলিক স্ট্রিংয়ের প্রকার {get; ব্যক্তিগত সেট; }
জেফ

আপনি এই ক্ষেত্রে _ টাইপ অ্যাক্সেস করতে অক্ষম হবে।
নিরাপত্তা মাউন্ট

1
সুতরাং সেই ক্ষেত্রে এটি টাইপ করুন = "ফু"; ঠিক আছে, তবে বাইরের উদাহরণ থেকে হওয়া উচিত T টাইপ = "foo"; না .. এই অটো প্রপসগুলি অবশ্যই ভাষার জন্য সহায়ক সংযোজন। ধন্যবাদ।
মাইকি

1

আমি জানি এটি একটি পুরানো প্রশ্ন তবে সি # 6 প্রকাশের সাথে সাথে আপনি এখন ব্যক্তিগত সম্পত্তিগুলির জন্য এই জাতীয় কিছু করতে পারেন।

public constructor()
{
   myProp = "some value";
}

public string myProp { get; }

2
আপনি সরাসরি সি # 6 এ প্রাথমিক মান সেট করতে পারেন: পাবলিক স্ট্রিং মাইপ্রপ {পেতে; ruct = "কিছু মান") নির্মাতা ছাড়াই;
এম হাসান

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.