Arabirimdeki bir mülk nasıl uygulanır?


135

IResourcePolicyÖzelliği içeren bir arayüz var Version. Değer, diğer sayfalarda yazılı kod içeren bu özelliği uygulamak zorunda:

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

Mülkiyeti nasıl uygulayabilirim version?

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

1
neden arayüzde herhangi bir şey uygulamak istiyorsun? Orada sadece arayüzü belirtin ...
Stefan Steinegger

Yanıtlar:


296

Arayüzde özelliği belirtirsiniz:

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

Uygulayıcı sınıfta, onu uygulamanız gerekir:

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

Bu benzer görünüyor, ama tamamen farklı bir şey. Arayüzde kod yok. Sadece bir alıcı ve ayarlayıcı içeren bir özellik olduğunu, ne yapacaklarını belirtirsiniz.

Sınıfta aslında onları uygularsınız. Bunu yapmanın en kısa yolu bu { get; set; }sözdizimini kullanmaktır . Derleyici bir alan oluşturur ve bunun için alıcı ve ayarlayıcı uygulamasını oluşturur.


Bunun Versionsınıfta halka açık olduğunu nasıl söylersin ? Ahh, sorunumu görüyorum: Arayüzü açık bir şekilde uygularsanız (örneğin IResourcePolicy.Version, herkese açık olup olmadığını tanımlayamazsınız.)
PeterX

5
Haklısın, halka açık olmalı. Onardım. Bunu pek umursamadım, çünkü açıklamaya çalıştığım şeylerle ilgili değil.
Stefan Steinegger

7
Tabii ki alakalı! İyi bir cevap vermek istiyorsanız, bunu insanlar için basitleştirmeniz gerekir. Yani bir sonraki probleme rastlamazlar.
Bitterblue

21

Böyle mi demek istiyorsun?

class MyResourcePolicy : IResourcePolicy {
    private string version;

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

1
Bu biliyorum ,, ama ben zaten irp.WrmVersion = "10.4"; sorumu gör ,, ben bu değeri kaybetmek zorunda değilim, onu geçmek zorunda
peter

16

Arabirimler herhangi bir uygulama içeremez (varsayılan değerler dahil). Soyut sınıfa geçmeniz gerekiyor.


Bu özelliği başka bir yerde nasıl uygulayabilirim
peter

o sınıfa örnek oluşturmak ve arabirim türüne sahip değişkene atamak yerine, o arabirimi uygulayan bir class @petr oluşturun
Arsen Mkrtchyan

4
İlk cümle için oy verirdim. Ancak bir arayüz yeterliyse soyut temel sınıflardan daima kaçınılmalıdır. Dolayısıyla, hangi sorunun gerçekten çözülmesi gerektiğini bilmeden önce, bir temel sınıf oluşturmayı önermemelisiniz.
Stefan Steinegger

2
@Stefan, ikinci cümle ile, eğer gerçekten tanıtılması için varsayılan bir değere ihtiyacı varsa, o zaman soyut sınıfı kullanması gerektiğini söyledim.
Vitaliy Liptchinsky

1

Arayüzde bir özellik kullanımına basit örnek:

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
  • ama ben zaten irp.WrmVersion = "10.4" gibi değerler atadı;

J.Random Coder'ın yanıtı ve sürüm alanını başlatın.


private string version = "10.4';

0

Bir özelliği başlatmak için soyut sınıfı kullanmalısınız. Inteface'te başlatamazsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.