কোনও ইন্টারফেসে কোনও সম্পত্তি কীভাবে প্রয়োগ করা যায়


135

আমি ইন্টারফেস থাকতে IResourcePolicyসম্পত্তি ধারণকারী Version। আমাকে এই সম্পত্তিটি প্রয়োগ করতে হবে যার মান, অন্যান্য পৃষ্ঠায় লিখিত কোড রয়েছে:

IResourcePolicy irp(instantiated interface)
irp.WrmVersion = "10.4";

আমি কীভাবে সম্পত্তি বাস্তবায়ন করতে পারি version?

public interface IResourcePolicy
{
   string Version
      {
          get;
          set;
      }
}

1
আপনি কেন ইন্টারফেসে কিছু বাস্তবায়ন করতে চান? সেখানে আপনি কেবল ইন্টারফেসটি নির্দিষ্ট করেছেন ...
স্টিফান স্টেইনগার

উত্তর:


296

ইন্টারফেসে, আপনি সম্পত্তিটি নির্দিষ্ট করুন:

public interface IResourcePolicy
{
   string Version { get; set; }
}

বাস্তবায়নকারী শ্রেণিতে আপনার এটি প্রয়োগ করা দরকার:

public class ResourcePolicy : IResourcePolicy
{
   public string Version { get; set; }
}

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

ক্লাসে, আপনি আসলে এগুলি বাস্তবায়ন করেন। এটি করার সবচেয়ে সংক্ষিপ্ততম উপায়টি হচ্ছে এই { get; set; }সিনট্যাক্সটি ব্যবহার করা । সংকলক একটি ক্ষেত্র তৈরি করবে এবং এর জন্য গিটার এবং সেটার বাস্তবায়ন উত্পন্ন করবে।


আপনি কীভাবে বলবেন যে Versionক্লাসে প্রকাশ্য? Ahh, আমি আমার সমস্যার দেখুন: যদি তোমরা ইন্টারফেস বাস্তবায়ন স্পষ্টভাবে (যেমন IResourcePolicy.Version, আপনি সংজ্ঞায়িত করতে পারবে না যদি এটা পাবলিক।
PeterX

5
আপনি ঠিক বলেছেন, এটি জনসাধারণের উচিত। আমি এটা ঠিক করেছি. আমি এ সম্পর্কে খুব একটা পাত্তা দিইনি, কারণ আমি যে বিষয়গুলি ব্যাখ্যা করার চেষ্টা করেছি তার সাথে এটি প্রাসঙ্গিক নয়।
স্টিফান স্টেইনগার

7
অবশ্যই এটি প্রাসঙ্গিক! আপনি যদি একটি ভাল উত্তর সরবরাহ করতে চান তবে আপনার এটি মানুষের জন্য সহজ করে তুলতে হবে। সুতরাং তারা পরের সমস্যায় হোঁচট খায় না।
বিটারব্লু

21

তুমি এইরকম বলতে চাও?

class MyResourcePolicy : IResourcePolicy {
    private string version;

    public string Version {
        get {
            return this.version;
        }
        set {
            this.version = value;
        }
    }
}

1
এটি আমি জানি, তবে আমি ইতিমধ্যে এমন মানগুলি অর্পণ করেছি WrmVersion = "10.4"; আমার প্রশ্নটি দেখুন ,,, আমাকে সেই মানটি হারাতে হবে না, আমাকে এটি পাস করতে হবে
পিটার

16

ইন্টারফেসে কোনও প্রয়োগ (ডিফল্ট মান সহ) ধারণ করতে পারে না। আপনাকে বিমূর্ত শ্রেণিতে স্যুইচ করা দরকার।


আমি এই সম্পত্তিটি অন্য কোথাও কীভাবে বাস্তবায়ন করতে পারি তা
পিটার

একটি ক্লাস @ পেটার তৈরি করুন যা সেই ইন্টারফেসকে কার্যকর করে, সেই শ্রেণীর ক্ষেত্রে উদাহরণ তৈরি করার পরিবর্তে এবং ইন্টারফেসের ধরণ রয়েছে এমন ভেরিয়েবলের জন্য বরাদ্দ করুন
আর্সেন এমক্রিটচায়ান

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

2
@ স্টেফান, দ্বিতীয় বাক্যটির দ্বারা আমি বোঝাতে চাইছিলাম যে যদি তাকে সত্যিকার অর্থেই একটি ডিফল্ট মান প্রবর্তনের প্রয়োজন হয় তবে তার উচিত বিমূর্ত শ্রেণি ব্যবহার করা।
ভিটালিয়া লিপচিনস্কি

1

একটি ইন্টারফেসে সম্পত্তি ব্যবহারের সহজ উদাহরণ:

using System;
interface IName
{
    string Name { get; set; }
}

class Employee : IName
{
    public string Name { get; set; }
}

class Company : IName
{
    private string _company { get; set; }
    public string Name
    {
        get
        {
            return _company;
        }
        set
        {
            _company = value;
        }   
    }
}

class Client
{
    static void Main(string[] args)
    {
        IName e = new Employee();
        e.Name = "Tim Bridges";

        IName c = new Company();
        c.Name = "Inforsoft";

        Console.WriteLine("{0} from {1}.", e.Name, c.Name);
        Console.ReadKey();
    }
}
/*output:
 Tim Bridges from Inforsoft.
 */

0
  • তবে আমি ইতিমধ্যে irp.WrmVersion = "10.4" মানগুলি নির্ধারিত করেছি;

জে.র্যান্ডম কোডারের উত্তর এবং সংস্করণ ক্ষেত্র আরম্ভ করুন।


private string version = "10.4';

0

কোনও সম্পত্তি শুরু করার জন্য আপনার বিমূর্ত শ্রেণি ব্যবহার করা উচিত। আপনি ইন্টারফেসে সূচনা করতে পারবেন না।

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