2012-11-06 118 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> 
{ 
... 
}