2012-05-17 15 views
21

Ben aynı zamanda şu arayüzüne sahip, ama bir geri arama çağırmak olmaz ancak bir geri arama kullanarak tipi T jenerik parametreyi döndürür aşağıdaki arayüz ...C# Jenerikler: Eğer T bir dönüş tipi ise, aynı zamanda boş olabilir mi? Bu arayüzleri nasıl birleştirebilirim?

public interface IDoWork<T> 
{ 
    T DoWork(); 
} 

o boşluk döndürür beri .

public interface IDoWork 
{ 
    void DoWork(); 
} 

Bu iki arabirimi birleştirebilir ve farkı belirlemek için çalışma zamanı mantığını kullanabilir miyim? Bunu nasıl yapabilirim?

+0

IDoWork ... 'gibi bir şeyi yapabildiğiniz için Java arazisinde olmadığınız için çok kötüyüz. C# diye bir şey teklif etmediğine şaşırdım. –

+1

@ChrisCashwell, çünkü .NET generikleri CLR'ye dahil edildi, Java'da ise sadece bir derleyici hilesi (JVM, çalışma zamanında jeneriklerle ilgili bir şey bilmiyor). Bu genellikle .NET jeneriklerinin bir avantajı olsa da, aynı zamanda kuralların daha sıkı olduğu anlamına da gelir ... –

+0

@ThomasLevesque .NET'in yaklaşımının Java üzerinde nasıl bir avantaj olduğunu daha fazla nerede öğrenebilirim? – LamonteCristo

cevap

20

Maalesef, birleştirilemezler.

Bunu çerçevede görebilirsiniz - bu nedenle ayrı bir Task ve Task<T> sınıfı vardır.

söyleniyor yapabilirsiniz sıklıkla

+0

Acaba T == nesnesi olup olmadığını ve object == null uygulamada neyse, hostta geri çağrıyı atlayabilirim. Bu mantıklı mı? – LamonteCristo

+0

@ makerofthings7 You ~ could ~ - ama null beklenen veya geçerli bir değer ise uygunsuz olabilir .. –

+1

Kişisel olarak onların davranış farklı olduğu için ben bu farkı ifade etmek için onlara biraz farklı isimler vermek istiyorum. –

1

döndürme türü yöntem imzası bir parçasıdır vb IDoWork<object> kullanarak ve değerler için null geçirerek senaryo bu tip paylaşım uygulamaları, T DoWork() ve boşluk DoWork yüzden() farklı ve geçersiz bir tür değil ve bir null değil. Yöntemin geri dönüşünde değerlendirme yığında hiçbir şeyin bulunmadığının bir göstergesidir.

+0

C# dönüş türü [yöntem imzasının] bir parçası değildir (https://msdn.microsoft.com/en-us/library/aa691131%28v=vs.71%29.aspx) – suhair