কী {পাবেন; সেট; } সি # তে সিনট্যাক্স?


577

আমি এএসপি.নেট এমভিসি শিখছি এবং আমি ইংরেজি নথিগুলি পড়তে পারি, তবে এই কোডটিতে কী ঘটছে তা আমি সত্যিই বুঝতে পারি না:

public class Genre
{
    public string Name { get; set; }
}

এটার মানে কি: { get; set; }?


4
সাধারণভাবে মনে রাখবেন - সেটাররা আপনার অবজেক্টটিকে পরিবর্তন করতে পারে, এটি একটি খারাপ ধারণা। getters লঙ্ঘন করে "কোন বস্তুকে কী করা উচিত বলুন, তথ্যের জন্য এটি জিজ্ঞাসা করবেন না এবং নিজেই এটি পরিচালনা করুন"। সুতরাং সাধারণভাবে, ডিফল্টরূপে সেটার এবং গেটারগুলি যুক্ত করবেন না। আপনার প্রায়শই প্রয়োজন হবে তবে এগুলি যুক্ত করার আগে আপনার সর্বদা একটি আসল প্রয়োজন খুঁজে পাওয়া উচিত। বিশেষত সেটারগুলি প্রায়শই উত্পাদন কোডে ব্যবহার করা উচিত নয় (যেখানে সম্ভব সেখানে অপরিবর্তনীয়তার জন্য চেষ্টা করুন, এবং যখন পরিব্যক্তি প্রয়োজন হয় তখন আপনাকে এটির জন্য পরিবর্তনের জন্য জিজ্ঞাসা করা উচিত, কোনও মান নির্ধারণ না করে)।
বিল কে

8
কেবল কিছু যুক্ত করার জন্য ... আপনি যদি না রাখেন তবে {get; set;}আপনি একটি ক্ষেত্র তৈরি করছেন তবে যদি আপনি রাখেন তবে {get; set;}আপনি একটি সম্পত্তি তৈরি করছেন । একটি সম্পত্তি থাকা বিশেষত প্রতিচ্ছবি নিয়ে কাজ করার সময় কিছু জিনিস সহজ করে তুলতে পারে।
Seichi

@ শেচি একটি গেট-সেটার ব্যবহার করে একটি ক্ষেত্রও তৈরি করে, তবে এটি লুকানো, ব্যক্তিগত হিসাবে ঘোষিত এবং স্বয়ংক্রিয়ভাবে তৈরি বৈশিষ্ট্য দ্বারা সংশোধিত; সংকলক দ্বারা তৈরি সমস্ত।
জোনাথন রামোস

1
অটো প্রপার্টিগুলি ব্যক্তিগত ক্ষেত্রগুলির উদ্দেশ্যকে পরাস্ত করে না ?
মিরিয়াজমা

উত্তর:


566

এটি একটি তথাকথিত অটো সম্পত্তি এবং মূলত নিম্নলিখিতগুলির জন্য একটি শর্টহ্যান্ড (অনুরূপ কোডটি সংকলক দ্বারা উত্পাদিত হবে):

private string name;
public string Name
{
    get
    {
        return this.name;
    }
    set
    {
        this.name = value;
    }
}

93
ক্লাউস, আপনি এই কোডটি দিয়ে কী হবে তা ব্যাখ্যা করতে পারেন? আরও বিশদ বিবরণ দিয়ে এটি উপকৃত হতে পারে could
টাইলার এইচ

3
সুতরাং, কেবল নিশ্চিত হওয়া: এটি =অপারেটরকে আমি বেশি চাপ দিয়েছি বলে মনে করি তবে কেবল একটি নির্দিষ্ট উপাদানের জন্য, তাই না?
হাই-এঞ্জেল

9
কেন আমাদের প্রাইভেট ভার লাগবে। : - / লজ্জা।
অলিভার ডিকসন

2
@TylerH প্রাইভেট ভেরিয়েবলের কারণ এনক্যাপসুলেশন, গেইট / সেটটি ভেরিয়েবলটি পেতে বা সেট করতে একটি "গেট" সরবরাহ করে। যদিও গেট / সেটার ব্যবহার না করার অনেক কারণ রয়েছে কারণ "গেট" ব্যক্তিগত ভেরিয়েবলের এনক্যাপসুলেশনটি ভেঙে দিতে পারে। (এটি অ্যাক্সেসযোগ্য না হওয়া উচিত)
আলেকজান্ডার

4
এটি সুস্পষ্ট হতে পারে তবে আমি স্পষ্ট করে বলতে চাই যে শর্টহ্যান্ড এটির জন্য আক্ষরিক অর্থে একটি শর্টহ্যান্ড নয় । অর্থাৎ কোনও প্রাইভেট ভেরিয়েবল nameতৈরি হয় না। আপনি যদি শ্রেণীর মধ্যে এই ব্যক্তিগত ভেরিয়েবলটি উল্লেখ করার চেষ্টা করেন তবে এটি ব্যর্থ হবে। আমি নিশ্চিত না যে সি # এটি কী করে, তবে এটি এমন আচরণ করে যে কোনও নাম নেই এমন একটি প্রাইভেট ভেরিয়েবল রয়েছে, যা আপনি আপনার কোডটিতে অ্যাক্সেস করতে পারবেন না।
ডেনজিলো

432

সুতরাং আমি যেহেতু বুঝতে পেরেছি { get; set; }এটি একটি "অটো সম্পত্তি" যা ঠিক ক্লাউস এবং @ ব্র্যান্ডন বলেছিলেন "ব্যাকিং ফিল্ড" দিয়ে একটি সম্পত্তি লেখার জন্য শর্টহ্যান্ড। সুতরাং এই ক্ষেত্রে:

public class Genre
{
    private string name; // This is the backing field
    public string Name   // This is your property
    {
        get => name;
        set => name = value;
    }
}

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

getএবং setহয় accessors , তারা সক্ষম অর্থ অ্যাক্সেস ডেটা এবং তথ্যে করা ব্যক্তিগত ক্ষেত্র (সাধারণত একটি থেকে ব্যাকিং ক্ষেত্র ) এবং সাধারণত থেকে তা করতে প্রকাশ্য বৈশিষ্ট্য (আপনি উপরোক্ত উদাহরণে দেখতে পারেন)।

অস্বীকার করার কোনও দরকার নেই যে উপরের বিবৃতিটি বেশ বিভ্রান্তিকর, সুতরাং আসুন কয়েকটি উদাহরণে যাওয়া যাক। যাক এই কোডটি সংগীতের জেনারগুলিকে উল্লেখ করছে। শ্রেণীর ঘরানার মধ্যে তাই আমরা বিভিন্ন ধরণের সংগীত চাইছি। ধরা যাক আমরা তিনটি জেনার রাখতে চাই: হিপ হপ, রক এবং কান্ট্রি। এটি করার জন্য আমরা ক্লাসের নামটি ব্যবহার করে সেই শ্রেণীর নতুন দৃষ্টান্ত তৈরি করব ।

Genre g1 = new Genre(); //Here we're creating a new instance of the class "Genre"
                        //called g1. We'll create as many as we need (3)
Genre g2 = new Genre();
Genre g3 = new Genre();

//Note the () following new Genre. I believe that's essential since we're creating a
//new instance of a class (Like I said, I'm a beginner so I can't tell you exactly why
//it's there but I do know it's essential)

এখন যেহেতু আমরা জেনার শ্রেণীর উদাহরণ তৈরি করেছি আমরা উপরে নাম সেট করা 'নাম' সম্পত্তি ব্যবহার করে জেনার নামগুলি সেট করতে পারি ।

public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now 

আমরা নিম্নলিখিত লিখে হিপ হপকে 'জি 1' এর নামটি সেট করতে পারি

g1.Name = "Hip Hop";

এখানে যা ঘটছে তা একরকম জটিল। যেমন আমি আগে বলেছি, getএবং setব্যক্তিগত ক্ষেত্রগুলি থেকে এমন তথ্য অ্যাক্সেস করুন যা আপনি অন্যথায় অ্যাক্সেস করতে সক্ষম হবেন না। getকেবলমাত্র সেই ব্যক্তিগত ক্ষেত্রের তথ্য পড়তে এবং তা ফিরিয়ে দিতে পারে। setকেবলমাত্র সেই ব্যক্তিগত ক্ষেত্রে তথ্য লিখতে পারে। তবে উভয়ের সাথেই সম্পত্তি রয়েছে getএবং setআমরা সেই দুটি ফাংশনই করতে সক্ষম। এবং লিখে g1.Name = "Hip Hop";আমরা বিশেষত setআমাদের নামের সম্পত্তি থেকে ফাংশনটি ব্যবহার করছি

setনামক একটি অন্তর্ভুক্ত পরিবর্তনশীল ব্যবহার করে value। মূলত এর অর্থ হ'ল যে কোনও সময় আপনি "মান" দেখেন set, এটি একটি ভেরিয়েবলকে বোঝায়; "মান" পরিবর্তনশীল। যখন আমরা লিখি g1.Name =আমরা চলকটি =পাস করতে ব্যবহার করি valueযা এই ক্ষেত্রে হয় "Hip Hop"। সুতরাং আপনি মূলত এটির মতো এটি ভাবতে পারেন:

public class g1 //We've created an instance of the Genre Class called "g1"
{
    private string name;
    public string Name
    {
        get => name;
        set => name = "Hip Hop"; //instead of 'value', "Hip Hop" is written because 
                              //'value' in 'g1' was set to "Hip Hop" by previously
                              //writing 'g1.Name = "Hip Hop"'
    }
}

এটি লক্ষ্য করা গুরুত্বপূর্ণ যে উপরের উদাহরণটি আসলে কোডটিতে লেখা হয়নি। এটি এমন একটি হাইপোথিটিকাল কোড যা আরও ব্যাকগ্রাউন্ডে যা চলছে তা উপস্থাপন করে।

তাই এখন আমরা করেছি যে সেট এর G1 উদাহরণস্বরূপ নাম জেনার , আমি মনে করেন যে আমরা করতে পারেন পেতে লেখা নাম

console.WriteLine (g1.Name); //This uses the 'get' function from our 'Name' Property 
                             //and returns the field 'name' which we just set to
                             //"Hip Hop"

এবং যদি আমরা এটি চালাতাম তবে আমরা "Hip Hop"আমাদের কনসোলটিতে যাব ।

সুতরাং এই ব্যাখ্যাটির উদ্দেশ্যে আমি আউটপুটগুলির সাথে উদাহরণটিও সম্পূর্ণ করব

using System;
public class Genre
{
    public string Name { get; set; }
}

public class MainClass
{
    public static void Main()
    {
        Genre g1 = new Genre();
        Genre g2 = new Genre();
        Genre g3 = new Genre();

        g1.Name = "Hip Hop";
        g2.Name = "Rock";
        g3.Name = "Country";

        Console.WriteLine ("Genres: {0}, {1}, {2}", g1.Name, g2.Name, g3.Name);
    }
}

আউটপুট:

"Genres: Hip Hop, Rock, Country"

18
ব্যক্তিগতভাবে আমি কেবল এটির মতো মন্তব্য করবset{name = value;} // 'value' here is equal to "Hip Hop"
maksymiuk

2
@ iLoveUnicorns, তথ্য বিমোচন করার উদ্দেশ্যে এটি রয়েছে । ব্যাকিং ফিল্ডটি হ'ল আসল ডেটা। সম্পত্তি সংজ্ঞা আসলে সংজ্ঞা দেয় যে কীভাবে ডেটা অ্যাক্সেস করা হয় getএবং setপদ্ধতিগুলি। আমি যে লিঙ্কটি দিয়েছি তাতে পৃষ্ঠার শীর্ষে জন গুট্যাগের একটি দুর্দান্ত উক্তি রয়েছে। আমি তাঁর বইটি পড়ার বা এই নিখরচায় অনলাইন কোর্সটি
জোসি থম্পসন

2
আমরা শুধু ব্যবহার করা যাবে না: public class Genre{public string Name;} পরিবর্তে: public class Genre{ public string Name { get; set; }}। আমি বলতে চাইছি, আমাদের এমনকি কেন দরকার {পেতে; সেট; }?
ব্যবহারকারী 2048204

1
মনে হচ্ছে আমার উদ্বেগ ইতিমধ্যে প্রতিধ্বনিত হয়েছে। আপনি যদি এইভাবে ঘোষণা করেন: "পাবলিক স্ট্রিংয়ের নাম {get; set;}" এবং আপনি এইভাবে অ্যাক্সেস করেন: g1.Name = "হিপ হপ"; - তাহলে অবজেক্ট ওরিয়েন্টেশন কোথায়? এমনকি তথাকথিত "ব্যাকিং ফিল্ড" দরকার নেই। ব্যাকিং ফিল্ড এমনকি অস্তিত্ব নেই, যতদূর আমি উদ্বিগ্ন। কারণ আমি কেবল সর্বজনীন ক্ষেত্রে অ্যাক্সেস করি। এবং যদি সর্বজনীন ক্ষেত্রটি "সর্বজনীন" হয় তবে এটি ওও অনুগত নয়। আসুন আমরা সবাই সিওবিএলে ফিরে যাই।
বারুচ আতা

1
দুর্দান্ত উত্তর, তবে আমরা যদি পেডেন্টিক হচ্ছি, তবে "সেট" হ'ল মিউটেটর, কোনও এক্সেসর নয়।
পাইথলং

100

সেগুলি স্বয়ংক্রিয় বৈশিষ্ট্য

ব্যাকিং ফিল্ড সহ সম্পত্তি লেখার অন্য উপায়।

public class Genre
{
    private string _name;

    public string Name 
    { 
      get => _name;
      set => _name = value;
    }
}

7
"ব্যাকিং ফিল্ড" কী বলা হয়?
kn3l

4
@ স্ট্যাকউন্ডারফ্লো: ব্যাকিং ফিল্ডটি যেখানে ডেটা সংরক্ষণ করা হয়। (ব্যবহারের সময় কী ফিরে আসে getএবং ব্যবহার অব্যাহত থাকে set)। আলমারির মতো যার দিকে getএবং setদরজাটি খোলে।
গ্রান্ট থমাস

5
@ স্ট্যাকউন্ডারফ্লো: এই উত্তরে, ব্যাকিং ফিল্ড _name। স্বয়ংক্রিয় সম্পত্তিতে, ব্যাকিং ফিল্ডটি লুকানো আছে।
জাস্টিন

36

এটি করার এই ছোট উপায়:

public class Genre
{
    private string _name;

    public string Name
    {
      get => _name;
      set => _name = value;
    }
}

33

ডেটা সদস্যদের পাবলিক হিসাবে প্রকাশ করার জন্য এটি একটি শর্টকাট যাতে আপনার স্পষ্টভাবে কোনও ব্যক্তিগত ডেটা সদস্য তৈরি করার প্রয়োজন হয় না। সি # আপনার জন্য একটি ব্যক্তিগত ডেটা সদস্য তৈরি করবে।

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


2
কেলসি - আপনি কী ব্যাখ্যা করতে পারেন যে কীভাবে এই সিনট্যাক্সটি এটিকে আরও "নমনীয়" কোড করে? আমি এটা দেখতে পাচ্ছি না। যদি আপনি সেটার বা গেটারে কোনও "যুক্তি" যুক্ত করেন তবে ইথারের ক্ষেত্রে (প্রাইভেট ডেটা সহ বা ছাড়াই) আপনি এখনও ইন্টারফেসটি যেমন ভেঙে ফেলবেন তেমন কিছু কোডিং দরকার need
বারুচ আত্তা

18

মূলত, এটির একটি শর্টকাট:

class Genre{
    private string genre;
    public string getGenre() {
        return this.genre;
    }
    public void setGenre(string theGenre) {
        this.genre = theGenre;
    }
}
//In Main method
genre g1 = new Genre();
g1.setGenre("Female");
g1.getGenre(); //Female

5
এটি প্রশ্নের উত্তর দেয় না। ওপি সম্পত্তি সম্পর্কে কথা বলছিল।
বিবি

6
গেট অ্যান্ড সেট বৈশিষ্ট্যগুলি আমি জানি, এটি একটি উদাহরণ যা আরও ভালভাবে বুঝতে সহায়তা করে
জিরসন টাভেরা

10

এটি সি # এর জন্য একটি স্ব-বাস্তবায়িত সম্পত্তি


1
এহ ... এর অর্থ কি এই আপনি স্ট্রিংয়ের সাথে শূন্যতার রেফারেন্স রাখেন এবং তারপরে যখন get; set;ডাকা হয় তখন এটি কোনও মান থেকে কোনও লোড করুন ?
অরুম অ্যাকিলা

1
হ্যাঁ এটি nullকোনও stringপরিবর্তনকের মতোই থাকেsomeInstanceOfGenere.Name = "someValue"
ড্যানিয়েল এ। হোয়াইট

6

তারা সর্বজনীন সম্পত্তি নামের প্রবেশাধিকারী।

আপনি এগুলি জেনারের উদাহরণে সেই সম্পত্তির মান পেতে / সেট করতে ব্যবহার করবেন।


6

এটি একটি স্ব-প্রয়োগকারী সম্পত্তি। এটি মূলত সি # তে একটি শ্রেণীর জন্য প্রাইভেট ভেরিয়েবলগুলি সংজ্ঞায়িত না করে সম্পত্তি তৈরি করার একটি সংক্ষিপ্ত উপায়। এগুলি সাধারণত ব্যবহার করা হয় যখন ভেরিয়েবলের মান পাওয়ার বা সেট করার সময় কোনও অতিরিক্ত যুক্তি প্রয়োজন হয় না।

আপনি এমএসডিএন এর অটো-ইমপ্লিমেন্টেড প্রোপার্টি প্রোগ্রামিং গাইড এ আরও পড়তে পারেন ।


6
  • গেট / সেট প্যাটার্নটি এমন একটি কাঠামো সরবরাহ করে যা ইনস্ট্যান্ট শ্রেণীর কোনও সম্পত্তি উদাহরণের সেটিং ('সেট') বা পুনরুদ্ধার ('get') চলাকালীন যুক্তিকে যুক্ত করার মঞ্জুরি দেয়, যা যখন কিছু তাত্ক্ষণিক যুক্তির জন্য প্রয়োজন তখন কার্যকর হতে পারে সম্পত্তি।

  • কোনও সম্পত্তিতে কেবলমাত্র 'get' অ্যাক্সেসর থাকতে পারে, যা সম্পত্তি কেবল পঠনযোগ্য করার জন্য করা হয়

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


5

এর অর্থ হ'ল আপনি যদি জেনার প্রকারের একটি ভেরিয়েবল তৈরি করেন তবে আপনি সম্পত্তি হিসাবে পরিবর্তনশীলটি অ্যাক্সেস করতে সক্ষম হবেন

Genre oG = new Genre();
oG.Name = "Test";

5
আপনি যখন স্বয়ংক্রিয়-প্রয়োগকৃত বৈশিষ্ট্যগুলি ব্যবহার করবেন না, আপনি এখনও এই পদ্ধতিতে এটি অ্যাক্সেস করতে সক্ষম হন। অর্থ্যাৎ এআইপি বাইরে থেকে অ্যাক্সেস সম্পর্কে নয়, তবে কোনও শ্রেণীর ভিতরে ঘোষণার বিষয়ে।
abatishchev

4

এ জাতীয় { get; set; }সিনট্যাক্সকে স্বয়ংক্রিয় বৈশিষ্ট্য, সি # 3.0 সিনট্যাক্স বলা হয়

সংকলনের জন্য আপনাকে অবশ্যই ভিজ্যুয়াল সি # 2008 / csc v3.5 বা তার বেশি ব্যবহার করতে হবে। তবে আপনি আউটপুট সংকলন করতে পারেন যা .NET ফ্রেমওয়ার্ক 2.0 হিসাবে কম লক্ষ্য করে (এই বৈশিষ্ট্যটি সমর্থন করার জন্য কোনও রানটাইম বা ক্লাস প্রয়োজন নেই)।


4

ভিজ্যুয়াল স্টুডিওতে, আপনি যদি Xকোনও শ্রেণীর কোনও সম্পত্তি সংজ্ঞায়িত করেন এবং আপনি এই শ্রেণিকে কেবল প্রকার হিসাবে ব্যবহার করতে চান, আপনার প্রকল্প তৈরির পরে আপনি একটি সতর্কতা পাবেন যা "ফিল্ড এক্স কখনই বরাদ্দ করা হয়নি, এবং সর্বদা এর ডিফল্ট থাকবে মান "

সম্পত্তিতে একটি যুক্ত করে { get; set; }আপনি Xএই সতর্কতাটি পাবেন না।

ভিজ্যুয়াল স্টুডিও 2013 এবং উপরের সংস্করণগুলির সাথে যুক্ত করে { get; set; }আপনি সেই সম্পত্তিটির সমস্ত উল্লেখ দেখতে সক্ষম হবেন।

এখানে চিত্র বর্ণনা লিখুন


4

এটি মূলত একটি শর্টহ্যান্ড। আপনি public string Name { get; set; }অনেক উদাহরণের মতো লিখতে পারেন তবে আপনি এটি লিখতেও পারেন:

private string _name;

public string Name
{
    get { return _name; }
    set { _name = value ; } // value is a special keyword here
}

কেন এটি ব্যবহার করা হয়? এটি কোনও সম্পত্তিতে অ্যাক্সেস ফিল্টার করতে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ আপনি নামগুলি সংখ্যা অন্তর্ভুক্ত করতে চান না।

আমাকে যদি আপনি একটি উদাহরণ দিতে:

private class Person {
    private int _age;  // Person._age = 25; will throw an error
    public int Age{
        get { return _age; }  // example: Console.WriteLine(Person.Age);
        set { 
            if ( value >= 0) {
                _age = value; }  // valid example: Person.Age = 25;
        }
    }
}

আনুষ্ঠানিকভাবে এটি অটো-ইমপ্লিমেন্টেড প্রোপার্টি নামে পরিচিত ( প্রোগ্রামিং গাইড ) পড়ার ভাল অভ্যাস । আমি টিউটোরিয়াল ভিডিও সি # বৈশিষ্ট্যগুলিও সুপারিশ করব : কেন "পান" এবং "সেট" ব্যবহার করুন


2

সেট করুন সম্পত্তিতে অ্যাক্সেস মডিফায়ারগুলি। সম্পত্তি ক্ষেত্র পড়তে পান। সেট সম্পত্তি মান সেট করে। প্রাপ্তি কেবল পঠনযোগ্য অ্যাক্সেসের মতো। সেটটি কেবল লেখার জন্য অ্যাক্সেসের মতো। সম্পত্তি হিসাবে পঠন হিসাবে ব্যবহার করতে লিখতে লিখুন এবং সেট উভয়ই ব্যবহার করতে হবে।


1
আমি মনে করি সেট করুন মডিফায়ারগুলি অ্যাক্সেস নয়, বাস্তবে তারা অ্যাক্সেসর। অ্যাক্সেস সংশোধনকারীদের মত: প্রকাশ্য, ব্যক্তিগত, অভ্যন্তরীণ ইত্যাদি
রোহিত অরোরার

1

যখন সম্পত্তি '=' চিহ্নের বাম দিকে (এলএইচএস) প্রদর্শিত হবে তখন ডান দিকে (আরএইচএস) সেটটি যখন ডাকা হবে তখন সেটটি আহ্বান করা হবে

স্বতঃ-প্রয়োগ করা সম্পত্তির জন্য, ব্যাকিং ফিল্ড দৃশ্যের পিছনে কাজ করে এবং দৃশ্যমান নয়।

উদাহরণ:

public string Log { get; set; }

অন্যদিকে স্বয়ংক্রিয়-প্রয়োগকৃত সম্পত্তির জন্য ব্যাকিং ফিল্ডটি সামনের দিকে, একটি ব্যক্তিগত স্কোপড ভেরিয়েবল হিসাবে দৃশ্যমান।

উদাহরণ:

private string log;

public string Log
{
    get => log;
    set => log = value;
}

এছাড়াও, এখানে লক্ষণীয় যে 'গেটর' এবং 'সেটার' বিভিন্ন 'ব্যাকিং ফিল্ড' ব্যবহার করতে পারে


এটি মনে করা প্রশ্নের উত্তর বলে মনে হচ্ছে না।
টাইলারহহ

যখন get & সেটটি চালু হয় তখন ইঙ্গিত দেওয়া হয়। উপরে উল্লিখিত সমস্ত উত্তরগুলি, এমন একটি ধারণা দেয় যে প্রাপ্ত ও সেট করার জন্য ব্যাকিং ফিল্ড একই। তবে ঘটনাটি এমন নয়। সুতরাং আমার উত্তরটি মূল প্রশ্নের সাথে খুব প্রাসঙ্গিক। আশা করি আপনি আমার সাথে একমত হবেন।
বালা

একটি স্বয়ংক্রিয়ভাবে উত্পাদিত সম্পত্তির জন্য, যা প্রশ্নটি এটিই জিজ্ঞাসা করে, গেটর এবং সেটারের জন্য বিভিন্ন ব্যাকিং ফিল্ড ব্যবহার করা যায় না; এখানে কেবল একটি ব্যাকিং ফিল্ড রয়েছে। একটি অ-অটো সম্পত্তি জন্য (যা সম্পর্কে প্রশ্ন জিজ্ঞাসা করে না) এমনকি ধারণাগতভাবে একেবারে ব্যাকিং ফিল্ডও নাও হতে পারে। অতিরিক্তভাবে, আপনি একটি অ্যাসাইনমেন্ট অপারেটরের বাম দিকে গিটার এবং একটি অ্যাসাইনমেন্ট অপারেটরের ডানদিকে একটি সেটার দিয়ে একটি প্রোগ্রাম লিখতে পারেন। সুতরাং কেবল এই সমস্ত তথ্যই জিজ্ঞাসা করা প্রশ্নের উত্তর দিচ্ছে না, তবে এটিও সমস্ত ভুল।
y

0

ব্যক্তিগত ভেরিয়েবলগুলি সংজ্ঞায়িত করুন

কনস্ট্রাক্টরের অভ্যন্তরে এবং ডেটা লোড করুন

আমি কনস্ট্যান্ট তৈরি করেছি এবং নির্বাচিত তালিকা শ্রেণিতে ধ্রুবক থেকে ডেটা লোড করেছি।

public  class GridModel
{
    private IEnumerable<SelectList> selectList;
    private IEnumerable<SelectList> Roles;

    public GridModel()
    {
        selectList = from PageSizes e in Enum.GetValues(typeof(PageSizes))
                       select( new SelectList()
                       {
                           Id = (int)e,
                           Name = e.ToString()
                       });

        Roles= from Userroles e in Enum.GetValues(typeof(Userroles))
               select (new SelectList()
               {
                   Id = (int)e,
                   Name = e.ToString()
               });
    }

  public IEnumerable<SelectList> Pagesizelist { get { return this.selectList; } set { this.selectList = value; } } 
  public IEnumerable<SelectList> RoleList { get { return this.Roles; } set { this.Roles = value; } }
  public IEnumerable<SelectList> StatusList { get; set; }

}

0

সম্পত্তি হ'ল স্তরের মতো যা ব্যক্তিগত শ্রেণীর শ্রেণীর অন্য সদস্যদের থেকে পৃথক করে। বাইরের বিশ্ব থেকে মনে হয় সম্পত্তি কেবল একটি ক্ষেত্র, কোনও সম্পত্তি ব্যবহার করে কোনও পণ্য ব্যবহার করা যেতে পারে rop

public class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string FullName => $"{FirstName} {LastName}";
}

public class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string FullName { get { return $"{FirstName} {LastName}"; } }
}

ফুলনাম একটি সম্পত্তি। তীরযুক্ত একটি শর্টকাট। বাইরের বিশ্ব থেকে, আমরা এইভাবে ফুলনামটি অ্যাক্সেস করতে পারি:

var person = new Person();
Console.WriteLine(person.FullName);

আপনি কীভাবে পূর্ণাঙ্গ নামটি প্রয়োগ করেছেন সে সম্পর্কে কলাররা চিন্তা করে না। ক্লাসের ভিতরে আপনি যা খুশি তাই পুরো নামটি পরিবর্তন করতে পারবেন।

আরও বিশদ ব্যাখ্যার জন্য মাইক্রোসফ্ট ডকুমেন্টেশন দেখুন:

https://docs.microsoft.com/en-us/dotnet/csharp/properties

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