एक इंटरफ़ेस में एक संपत्ति कैसे लागू करें


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वर्ग में सार्वजनिक है? आह, मुझे मेरी समस्या दिखाई देती है: यदि आप इंटरफ़ेस को स्पष्ट रूप से लागू करते हैं (उदाहरण के लिए IResourcePolicy.Version, यदि आप सार्वजनिक हैं तो आप इसे परिभाषित नहीं कर सकते।
पीटरएक्स

5
आप सही हैं, यह सार्वजनिक होना चाहिए। मैंने ठीक कर दिया। मैंने इस बारे में ज्यादा परवाह नहीं की, क्योंकि यह उन चीजों के लिए प्रासंगिक नहीं है जिन्हें मैंने समझाने की कोशिश की थी।
स्टीफन स्टाइनगर

7
बेशक यह प्रासंगिक है! यदि आप एक अच्छा जवाब देना चाहते हैं तो आपको लोगों के लिए इसे सरल बनाने की आवश्यकता है। इसलिए वे अगली समस्या पर ठोकर नहीं खाते।
Bitterblue

21

यानी तुम्हें ये पसंद है?

class MyResourcePolicy : IResourcePolicy {
    private string version;

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

1
यह मुझे पता है, लेकिन मुझे पहले से ही ऐसे मान दिए गए हैं जो irp.WrmVersion = "10.4"; मेरा प्रश्न देखें, मुझे उस मूल्य को खोने की जरूरत नहीं है,, मुझे इसे पास करना होगा
पीटर

16

इंटरफेस में कोई कार्यान्वयन नहीं हो सकता है (डिफ़ॉल्ट मान सहित)। आपको अमूर्त कक्षा में स्विच करने की आवश्यकता है।


Thats क्या मैं इस संपत्ति को कहीं और कैसे लागू कर सकता हूं
पीटर

एक वर्ग @petr बनाएं जो उस इंटरफ़ेस को लागू करता है, उस वर्ग के लिए उदाहरण बनाएं और चर को असाइन करें जिसके पास इंटरफ़ेस प्रकार है
Arsen Mkrtchyan

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

किसी संपत्ति को शुरू करने के लिए आपको अमूर्त वर्ग का उपयोग करना चाहिए। आप इंटेक्स में इनटिटलाइज नहीं कर सकते।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.