2017-06-04 80 views
0

比方说,我有最简单的接口,在我的程序的所有组件。强制属性加成用于实现接口的所有类

public interface IComponent 
{    
} 

我知道,每一个部件被写入该项目已实现此接口,并且我知道,所有这些组件将使用的BinaryFormatter C#保存到磁盘上。这意味着每个组件都必须用[Serializable]属性进行装饰。现在有没有办法强制添加此属性?

我说“现在”因为我发现,告诉我,这是不可能的各种做题 - 但所有我能找到的问题是从2008年开始自那时以来已在C#规范什么变化吗?还是必须使用旧答案中描述的解决方法之一?

+1

最老的C#的问题,我可以找到关于Stack Overflow是从2008年7月,你是怎么找到那些从2008年_before_回答你的问题? C#规范中的许多内容已经发生了变化,但没有任何内容会改变编译时使用属性的方式(即,它们大多不是......只有少数例外,这是编译器特有的)。您应该将您的问题关闭为您找到的现有答案的一个副本,或者将其完全删除。 –

+0

的“或更早版本”部分是误导,因为SO是在2008年开始,如果您的评论是确实的答案,我会关闭的问题:什么事都没有变化,有没有办法执行属性装饰。但我认为要慎重,因为自从C#3.0和6.0以来,很多事情都发生了变化。 – Drakestar

回答

0

您可以编写单元测试,使用反射从库中拾取所有实现IComponent,并检查它们是否具有Serializable属性。我不相信自2008年以来.NET中引入的任何新特性,可能会使检查编译时间变得特殊,对不起。