ইন্টারফেস ব্যবহার করার সময় আপনি কীভাবে একটি বেসরকারী সেটটার প্রয়োগ করেন?


139

আমি কিছু বৈশিষ্ট্য সহ একটি ইন্টারফেস তৈরি করেছি।

ইন্টারফেসটি উপস্থিত না থাকলে শ্রেণীর অবজেক্টের সমস্ত বৈশিষ্ট্য সেট করা হত

{ get; private set; }

তবে ইন্টারফেস ব্যবহার করার সময় এটি অনুমোদিত নয়, সুতরাং এটি কীভাবে অর্জন করা যায় এবং যদি হয় তবে কীভাবে?

উত্তর:


266

ইন্টারফেসে আপনি কেবল getterআপনার সম্পত্তির জন্য সংজ্ঞা দিতে পারেন

interface IFoo
{
    string Name { get; }
}

তবে আপনার ক্লাসে আপনি এটির জন্য এটি বাড়িয়ে দিতে পারেন private setter-

class Foo : IFoo
{
    public string Name
    {
        get;
        private set;
    }
}

1
ইন্টারফেসে কেবল একজন গেটর রয়েছে এমনকি সেটারটি সর্বজনীন কিনা তা অভিযোগ বলে মনে হচ্ছে না।
মাইক চিল

6
@ মাইকচিল Thats কারণ ইন্টারফেসটি ন্যূনতম পদ্ধতি / অ্যাক্সেসরগুলি কেবল সংজ্ঞায়িত করে। আপনি যখন সরাসরি অবজেক্টটি ব্যবহার করছেন তখন আপনি আরও যুক্ত করতে পারেন free যদিও কোনও বিষয়বস্তুটিকে ইন্টারফেস হিসাবে টাইপ করার সময় কেবলমাত্র সেই পদ্ধতিগুলি / ইন্টারফেসে সংজ্ঞায়িতগুলি ব্যবহারযোগ্য।
মার্সেলো নিকোলেত্তি

29

ইন্টারফেস পাবলিক এপিআই সংজ্ঞায়িত করে। যদি সর্বজনীন এপিআইতে কেবল প্রাপ্তি থাকে তবে আপনি কেবল ইন্টারফেসে গেটারকে সংজ্ঞায়িত করবেন:

public interface IBar
{
    int Foo { get; }    
}

ব্যক্তিগত সেটটার পাবলিক এপিআই (অন্য কোনও প্রাইভেট সদস্য হিসাবে) এর অংশ নয়, সুতরাং আপনি এটি ইন্টারফেসে সংজ্ঞায়িত করতে পারবেন না cannot তবে আপনি ইন্টারফেস বাস্তবায়নে যে কোনও (বেসরকারী) সদস্যকে যুক্ত করতে নির্দ্বিধায়। প্রকৃতপক্ষে সেটারটি সরকারী বা বেসরকারী হিসাবে প্রয়োগ করা হবে বা সেটার হবে কিনা তা বিবেচ্য নয়:

 public int Foo { get; set; } // public

 public int Foo { get; private set; } // private

 public int Foo 
 {
    get { return _foo; } // no setter
 }

 public void Poop(); // this member also not part of interface

সেটার ইন্টারফেসের অংশ নয়, সুতরাং এটি আপনার ইন্টারফেসের মাধ্যমে কল করা যায় না:

 IBar bar = new Bar();
 bar.Foo = 42; // will not work thus setter is not defined in interface
 bar.Poop(); // will not work thus Poop is not defined in interface
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.