Bagaimana mengimplementasikan properti dalam sebuah antarmuka

138

Saya memiliki antarmuka yang IResourcePolicyberisi properti Version. Saya harus menerapkan properti ini yang berisi nilai, kode yang ditulis di halaman lain:

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

Bagaimana cara menerapkan properti version?

public interface IResourcePolicy
{
   string Version
      {
          get;
          set;
      }
}
peter
sumber
1
mengapa Anda ingin menerapkan apa pun di antarmuka? Di sana Anda tinggal menentukan antarmuka ...
Stefan Steinegger

Jawaban:

303

Di antarmuka, Anda menentukan properti:

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

Di kelas penerapan, Anda perlu mengimplementasikannya:

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

Ini terlihat serupa, tetapi ini adalah sesuatu yang sama sekali berbeda. Di antarmuka, tidak ada kode. Anda cukup menentukan bahwa ada properti dengan pengambil dan penyetel, apa pun yang akan mereka lakukan.

Di kelas, Anda benar-benar menerapkannya. Cara terpendek untuk melakukannya adalah menggunakan { get; set; }sintaks ini . Kompiler akan membuat sebuah field dan menghasilkan implementasi getter dan setter untuknya.

Stefan Steinegger
sumber
Bagaimana Anda mengatakan bahwa Versionpublik di kelas? Ahh, saya mengerti masalah saya: jika Anda mengimplementasikan Antarmuka secara eksplisit (misalnya IResourcePolicy.Version, Anda tidak dapat menentukan apakah itu publik.
PeterX
5
Anda benar, itu harus publik. Aku telah memperbaikinya. Saya tidak terlalu peduli tentang ini, karena ini tidak relevan dengan hal-hal yang saya coba jelaskan.
Stefan Steinegger
7
Tentu saja relevan! Jika Anda ingin memberikan jawaban yang baik, Anda perlu membuatnya sederhana untuk orang lain. Jadi mereka tidak tersandung pada masalah berikutnya.
Bitterblue
22

Maksudmu seperti ini?

class MyResourcePolicy : IResourcePolicy {
    private string version;

    public string Version {
        get {
            return this.version;
        }
        set {
            this.version = value;
        }
    }
}
J. Random Coder
sumber
1
ini saya tahu ,, tetapi saya sudah menetapkan nilai-nilai seperti irp.WrmVersion = "10.4"; lihat pertanyaan saya`` saya tidak perlu kehilangan nilai itu`` saya harus melewatinya
peter
16

Antarmuka tidak boleh berisi implementasi apa pun (termasuk nilai default). Anda perlu beralih ke kelas abstrak.

Vitaliy Liptchinsky
sumber
Itulah yang bagaimana saya dapat mengimplementasikan properti ini di tempat lain
peter
buat kelas @petr yang mengimplementasikan antarmuka itu, lalu buat instance ke kelas itu dan tetapkan ke variabel yang memiliki tipe antarmuka
Arsen Mkrtchyan
4
Saya akan memilih kalimat pertama. Tetapi kelas dasar abstrak harus selalu dihindari jika antarmuka sudah cukup. Jadi sebelum Anda mengetahui masalah apa yang sebenarnya harus diselesaikan, sebaiknya Anda tidak menyarankan untuk membuat kelas dasar.
Stefan Steinegger
2
@ Stefan, dengan kalimat kedua yang saya maksud adalah jika dia benar-benar membutuhkan nilai default untuk diperkenalkan, maka dia harus menggunakan kelas abstrak.
Vitaliy Liptchinsky
1

Contoh sederhana menggunakan properti dalam sebuah antarmuka:

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.
 */
Bernard Czaiński
sumber
0
  • tetapi saya sudah menetapkan nilai seperti irp.WrmVersion = "10.4";

Jawaban J. Random Coder dan inisialisasi kolom versi.


private string version = "10.4';
kazuk
sumber
0

Anda harus menggunakan kelas abstrak untuk menginisialisasi properti. Anda tidak dapat memulai di Inteface.

Abdus Salam Azad
sumber