你能给一个C#成员不同类中另一个成员的属性吗?
假设我们有两个类,你能给一个C#成员不同类中另一个成员的属性吗?,c#,.net,attributes,C#,.net,Attributes,假设我们有两个类,ClassA和ClassB,它们都有方法DoSomething()ClassB包含一个ClassA字段,当调用ClassB.DoSomething()时,它将调用委托给ClassA.DoSomething()。另外,ClassA.DoSomething()还有一些属性。所以我们有类似于 class ClassA { [SomeAttribute] int DoSomething() { return 0; } } class ClassB { publ
ClassA
和ClassB
,它们都有方法DoSomething()
ClassB
包含一个ClassA
字段,当调用ClassB.DoSomething()
时,它将调用委托给ClassA.DoSomething()
。另外,ClassA.DoSomething()
还有一些属性。所以我们有类似于
class ClassA {
[SomeAttribute]
int DoSomething() { return 0; }
}
class ClassB {
public ClassA CA { get; }
int DoSomething() { return CA.DoSomething(); }
}
我的问题是,是否有某种方法可以将ClassA.DoSomething()
上存在的属性应用于ClassB.DoSomething()
,而不重复该代码?如果ClassA.DoSomething()
具有多个属性,该怎么办?是否有一些属性看起来像[ApplyAttributes(typeof(ClassA),“DoSomething”)]
我不打算在运行时动态应用属性,这一切都可能发生在编译时
这是针对Silverlight解决方案的,因此某些反射技术(如TypeDescriptor)对我来说是不可用的。我将创建一个自定义,负责分析ApplyAttributes属性并在运行时返回相关属性
我认为这比在编译之前修改源代码的糟糕构建步骤要容易得多。属性是运行时的事情。也就是说,了解应用于类的属性需要类的活动实例 现在,如果/当Microsoft提供“编译器即服务”功能时,您可以在“编译”时获取此信息并对其进行处理。从本质上讲,除非您解析代码文件并修改其他类的C#代码,否则就无法在编译时执行您希望执行的操作
如果类是通过继承关联的,那么可以将属性定义为可继承的。+1但是
TypeDescriptor
是一个静态密封类。我想您的意思是说“implementICustomTypeDescriptor
”,这是一个由对象上的TypeDescriptor
检测并使用的接口。这看起来就是我想要的,非常感谢(还有你对Wim的澄清)。我会让你知道我是如何相处的。我研究过这种方法,但我的应用程序在Silverlight中,并且它看起来像TypeDescriptor和ICustomTypeDescriptor在Silverlight中不可用,所以我将把它标记为未回答。无论如何,谢谢你,无论如何,它们看起来都很有趣。@Martin-你可能想更新你的问题-它没有说解决方案是针对Silverlight的。classA和classB之间有什么关系吗?只是从classB到classA的关联