2012-03-19 11 views
9

Soru başlığı önerdiğim gibi, bir arabirime bir Action<string> eklemek istiyorum. Mümkün mü? bu sadece bir alan, ve derleyici işaret olarak arayüzleri alanlarını içeremez set/get olmadanBir arabirime Action <string> nasıl eklersiniz?

public interface IYourInterface 
{ 
    Action<string> YourAction { get; set; } 
} 

: Şu anda o Interfaces cannot contain fields

+0

Sözleşmenize/arabiriminize delegeler eklemek kötü bir tasarımdır. –

+0

@KirillPolishchuk bunu açıklayabilir misiniz? – anatol

cevap

22

Bir mülke olarak eklemek gerekiyordu diyor . Bu bu arabirim zaman (belli ki olabilir gerçi basit bir oto-mülk) siz de fiili özelliği sağlamanız gerekir anlamına gelmez:

public class Foo : IYourInterface 
{ 
    public Action<string> YourAction { get; set; } 

    // ... 
} 

ardından gelen Action<string> kullanabilirsiniz göz önüne alındığında arayüz:

IYourInterface iFoo = new Foo(); 

iFoo.YourAction = s => Console.WriteLine(s); 

iFoo.YourAction("Hello World!"); 

Hans belirtildiği gibi, arayüzünüze gösterebilir sadece get (ya da sadece bir set) istersen. Bu, sınıfının'un diğerine sahip olamayacağı anlamına gelmez, sadece arabirim aracılığıyla erişilemeyeceği anlamına gelir. Örneğin:

public interface IYourInterface 
{ 
    Action<string> YourAction { get; } 
} 

public class Foo : IYourInterface 
{ 
    public Action<string> YourAction { get; set; } 
} 

Yani yukarıdaki kodda, yalnızca arayüz üzerinden bir get olarak YourAction özelliğine erişebilir, ama sen yapabilirsin set veya Foo sınıfından get onu.

+0

Ek olarak: Bir arayüzde sadece bir "get" olduğunu belirtebilirsiniz: 'Eylem YourAction {get; } ', uygulamaya nasıl bir "set" sağlayıp sağlayamayacağı. –

+0

Çok doğru. Hatta bir kümesi (hatta bu biraz daha az yararlı olsa da) belirtebilirsiniz –

0

Arabirim alanları içeremez, ancak özellikleri içerebilir, böylece bu şekilde ekleyebilirsiniz.

0

Ben alıntı:

"Arabirimler yöntemlerle, özellikleri, olayları indeksler veya bu dört üye türlerinden herhangi kombinasyonundan oluşan bir arayüz sabitler, alanlar, operatörler, örnek kurucular, yıkıcı içeremez. .. Eylem bir feild olduğundan veya tipleri o Arayüzler üyeleri otomatik olarak genel statik üyeleri içeremez ve herhangi erişim değiştiricileri"

içeremez - bu olamazdı bir arayüzün bir parçası. http://msdn.microsoft.com/en-us/library/ms173156.aspx

+5

Kimin bir alan olması gerektiğini söylüyor. Bir özellik de olabilir. – rideronthestorm

İlgili konular