2012-11-06 83 views
5

有沒有一種方法可以創建具有必須由實現接口的類使用的屬性的接口?需要實現屬性的接口

I.e.如果Foo類實現接口IFoo,並且IFoo被定義爲必須具有ObserveMeAttribute,那麼Foo必須在其上定義ObserveMe以實現IFoo。

編輯:

屬性被稱爲EntityTypeAttribute和用於指定實體類型爲視圖模式,與使用:

[EntityType(typeof(User))] 
public class UserViewModel 
{ 
... 
} 

屬性是一個擴展方法AddModel使用(T TModel的),其中屬性是從TModel中讀取的,它的屬性類型entityType用於創建實體存根對象。

+0

誠然,我沒有做什麼用的接口,因爲大學,但我想,如果一個類實現的接口,它必須實現該接口的一切嗎?這就是我從[Interfaces(C#編程指南)](http://msdn.microsoft.com/en-us/library/vstudio/ms173156.aspx)收集的內容 – MyCodeSucks

回答

3

簡單的答案是「否」。如果每個對象都必須有這個值來實現IFoo,爲什麼不讓它成爲IFoo接口的一部分?

屬性主要是一種機制,通過使用反射在運行時上查找有關類/方法/參數的其他聲明性信息。

+0

它們也被引入到抽象的重複邏輯遠離類是我想要做的。我也不喜歡向我的模型類引入額外的屬性,這些屬性不是對象定義的一部分。 –

+0

然後,您可能會在運行時(或在自定義構建步驟中)檢查是否存在此屬性。處理其上具有Ixxx接口的重複性邏輯可以放置在擴展方法中。您的屬性和用法的示例可能會有所幫助。 –

+0

我添加了屬性的說明。基本上我想確保我的通用視圖模型必須用EntityTypeAttribute修飾而不是創建錯誤處理。 –

0

你不能那樣做。但是你可以讓你的ViewModel類一般用Model類一般的參數解決您的問題:

public abstract class Model 
{ 
... 
} 

public abstract class ViewModel<TModel> where TModel : Model 
{ 
... 
} 

,並在此抽象類爲每個模型和視圖模型實現你重複的邏輯。然後,你將有:

public class User : Model 
{ 
... 
} 

public class UserViewModel : ViewModel<User> 
{ 
... 
}