c# - নেট এবং ডেটে ডেটার




.net visual-studio-2010 (6)

1 ম

string _myProperty { get; set; }

এটি। নেট বিশ্বের একটি অটো সম্পত্তি বলা হয়। এটি # 2 এর জন্য সিনট্যাক্টিক চিনি।

2nd

string _myProperty;

public string myProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}

এটি করার সাধারন উপায়, যা আপনার সম্পত্তিটিতে কোনও বৈধতা বা অতিরিক্ত কোড করার প্রয়োজন হয়। উদাহরণস্বরূপ, যদি আপনি কোনও সম্পত্তি পরিবর্তিত ইভেন্টটি ফায়ার করার প্রয়োজন হয় তবে WPF এ। আপনি যদি না করেন, কেবল স্বয়ং সম্পত্তি ব্যবহার করুন, এটি বেশিরভাগ মানক।

3

string _myProperty;

public string getMyProperty()
{
    return this._myProperty;
}

public string setMyProperty(string value)
{
    this._myProperty = value;
}

this শব্দ এখানে অকার্যকর। সব প্রয়োজন নেই। এইগুলি কেবল এমন পদ্ধতি যা প্রাপ্ত এবং বৈশিষ্ট্যের বিরোধিতা হিসাবে সেট করে, যেমন কাজ করার জাভা উপায়।

এই প্রশ্নটি ইতিমধ্যে একটি উত্তর আছে:

আমি বিস্ময়কর ছিলাম যে গেটস এবং সেট্টারের ঘোষণার মধ্যে পার্থক্য কী ছিল এবং যদি কোনও পছন্দসই পদ্ধতি (এবং কেন)। প্রথমটি ভিজ্যুয়াল স্টুডিও দ্বারা স্বয়ংক্রিয়ভাবে তৈরি করা যেতে পারে। কিভাবে অন্যদের সম্পর্কে? ধন্যবাদ

1 ম

string _myProperty { get; set; }

2nd

string _myProperty;

public string myProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}

3 য়

string _myProperty;

public string getMyProperty()
{
  return this._myProperty;
}

public void setMyProperty(string value)
{
  this._myProperty = value;
}

3 দিয়ে শুরু করতে দেয় যে কাজ করবে না। public getMyProperty() কোন রিটার্ন টাইপ আছে।

এবং সংখ্যা 1 এবং 2 আসলে একই জিনিস। 2 সংখ্যা 1 সংকলনের পরে কি হয়।

সুতরাং 1 এবং 2 একই জিনিস। দুটি সঙ্গে আপনি আপনার মডেল কিছু বৈধতা বা ক্যাশিং থাকতে পারে।

অন্য যে তারা একই হয়ে।


এই সঙ্গে, আপনি get বা set সুযোগ মধ্যে কিছু কোড সঞ্চালন করতে পারেন।

private string _myProperty;
public string myProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}

আপনি স্বয়ংক্রিয় বৈশিষ্ট্য ব্যবহার করতে পারেন:

public string myProperty
{
    get;
    set;
}

এবং নেট ফ্রেমওয়ার্ক আপনার জন্য পরিচালনা করবে। এটি তৈরি করা হয়েছিল কারণ এটি একটি ভাল pratice এবং এটি করা সহজ করে তোলে।

নমুনার জন্য আপনি এই স্কোপগুলির দৃশ্যমানতা নিয়ন্ত্রণ করতে পারেন:

public string myProperty
{
    get;
    private set;
}

public string myProperty2
{
    get;
    protected set;
}

public string myProperty3
{
    get; 
}

হালনাগাদ

এখন সি # আপনি একটি সম্পত্তি মান আরম্ভ করতে পারেন। নমুনার জন্য:

public int Property { get; set; } = 1;

এছাড়াও এটি সংজ্ঞায়িত করতে পারেন এবং একটি সেট ছাড়া, এটি পাঠযোগ্যভাবে করতে পারেন।

public int Property { get; } = 1;

এবং অবশেষে, আপনি একটি তীর ফাংশন সংজ্ঞায়িত করতে পারেন।

public int Property { get; } => GetValue();

প্রথমটি ফেরত বা লিখতে বিশেষ কিছু নেই, যখন ডিফল্ট হয়। ২ য় এবং 3 য় মূলত একই রকম, যেখানে 3 য়টি আরও 2 সেকেন্ডের আরও বিস্তৃত সংস্করণ


বৈশিষ্ট্য কিছু তথ্য encapsulate ব্যবহার করা হয়। আপনি একটি প্লেইন ক্ষেত্র ব্যবহার করতে পারে:

public string MyField

কিন্তু এই ক্ষেত্রটি আপনার বর্গের সকল বাইরের ব্যবহারকারীদের দ্বারা অ্যাক্সেস করা যেতে পারে। লোকেরা অবৈধ মানগুলি সন্নিবেশ করতে পারে বা আপনি প্রত্যাশা না করে মান পরিবর্তন করতে পারেন।

একটি সম্পত্তি ব্যবহার করে, আপনি আপনার তথ্য অ্যাক্সেস করা হয় উপায় encapsulate করতে পারেন। একটি # একটি সম্পত্তি একটি ক্ষেত্র বাঁক জন্য চমৎকার সিনট্যাক্স আছে:

string MyProperty { get; set; }

এটি একটি স্বয়ংক্রিয় বাস্তবায়িত সম্পত্তি বলা হয় । যখন প্রয়োজন হয় তখন আপনি আপনার সম্পত্তি প্রসারিত করতে পারেন:

string _myProperty;

public string MyProperty
{
    get { return _myProperty; }
    set { _myProperty = value; }
}

এখন আপনি আপনার setter মান যাচাই করে এমন কোড যুক্ত করতে পারেন:

set
{
    if (string.IsNullOrWhiteSpace(value))
        throw new ArgumentNullException();

    _myProperty = value;
}

গেট্টার এবং সেটটারের জন্য বৈশিষ্ট্যের বিভিন্ন অ্যাক্সেসার থাকতে পারে:

public string MyProperty { get; private set; }

এইভাবে আপনি এমন একটি সম্পত্তি তৈরি করেন যা প্রত্যেকের দ্বারা পড়তে পারা যায় তবে কেবল ক্লাস দ্বারা সংশোধন করা যেতে পারে।

আপনি আপনার getter জন্য একটি সম্পূর্ণ কাস্টম বাস্তবায়ন যোগ করতে পারেন:

public string MyProperty
{
    get
    {
        return DateTime.Now.Second.ToString();
    }
}

যখন সি # আপনার স্বয়ংক্রিয়ভাবে বাস্তবায়িত সম্পত্তি কম্পাইল করে, এটি ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (আইএল) তৈরি করে। আপনার IL এ আপনি একটি get_MyProperty এবং set_MyProperty পদ্ধতি দেখতে পাবেন। এটি <MyProperty>k_BackingField নামে একটি ব্যাকিং ক্ষেত্রও তৈরি করে (সাধারণত এটি C # একটি অবৈধ নাম কিন্তু আইএল এটি বৈধ। এইভাবে আপনি উত্পন্ন প্রকার এবং আপনার নিজের কোডের মধ্যে কোনো দ্বন্দ্ব পাবেন না)। যাইহোক, আপনি C # মধ্যে সরকারী সম্পত্তি সিনট্যাক্স ব্যবহার করা উচিত। এটি C # (উদাহরণস্বরূপ IntelliSense এর সাথে) একটি নিকৃষ্ট অভিজ্ঞতা তৈরি করে।

কনভেনশন দ্বারা, আপনি দীর্ঘ সময় নিতে অপারেশন জন্য বৈশিষ্ট্য ব্যবহার করা উচিত নয়।


শুধু আপনার তৃতীয় প্রবন্ধে clarify, _myProperty আসলে একটি সম্পত্তি নয়। এটি পেতে এবং সেট পদ্ধতিগুলির সাথে একটি ক্ষেত্র (এবং যেমন ইতিমধ্যে উল্লেখ করা হয়েছে এবং সেট পদ্ধতিগুলি ফেরত প্রকার উল্লেখ করতে হবে)।

C # তে তৃতীয় পদ্ধতিটি বেশিরভাগ পরিস্থিতিতে এড়িয়ে চলতে হবে। যদি আপনি ফিরে যাবার জন্য টাইপ করতে চান তবে আপনি কেবল এটিই ব্যবহার করবেন যদি একটি অ্যারে ছিল, অথবা যদি পাওয়ার পদ্ধতিটি একটি মান ফেরত দেওয়ার পরিবর্তে অনেক বেশি কাজ করে। পরেরটি সত্যিই প্রয়োজনীয় নয় তবে স্বচ্ছতার উদ্দেশ্যে সম্পত্তি অর্জনের পদ্ধতি যা প্রচুর কাজকে বিভ্রান্তিকর করে।







visual-studio-2010