Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能给一个C#成员不同类中另一个成员的属性吗?_C#_.net_Attributes - Fatal编程技术网

你能给一个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
是一个静态密封类。我想您的意思是说“implement
ICustomTypeDescriptor
”,这是一个由对象上的
TypeDescriptor
检测并使用的接口。这看起来就是我想要的,非常感谢(还有你对Wim的澄清)。我会让你知道我是如何相处的。我研究过这种方法,但我的应用程序在Silverlight中,并且它看起来像TypeDescriptor和ICustomTypeDescriptor在Silverlight中不可用,所以我将把它标记为未回答。无论如何,谢谢你,无论如何,它们看起来都很有趣。@Martin-你可能想更新你的问题-它没有说解决方案是针对Silverlight的。classA和classB之间有什么关系吗?只是从classB到classA的关联