我有以下属性,其中Inherited
设置为true。
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Method, Inherited = true)]
public class InheritedAttribute : Attribute { }
DerivedA类包含一个属性,该属性使用[InheritedAttribute]
标记覆盖BaseA的虚拟属性。
public class BaseA
{
[InheritedAttribute]
public virtual int prop { get; set; }
}
public class DerivedA : BaseA
{
public override int prop { get; set; }
}
不幸的是,在DerivedA.prop
上找不到该属性,因此该属性尚未继承到child属性。
public static void Main()
{
var propertyInfo = typeof(DerivedA).GetProperties()[0];
// propertyInfo.CustomAttributes is empty
// propertyInfo.GetCustomAttributes(true) is empty
}
如果将属性放在方法而不是属性上(如example code on microsoft's website中所示),则该属性将按预期继承,并且可以在methodInfo.CustomAttributes
中找到。
是否仅在属性上不允许属性继承?还是我完全想念其他东西?
参考方案
发生这种情况的原因是,根据MSDN规范,GetCustomAttributes
方法忽略了属性和事件的inherit
参数。实际上,您的属性具有此属性,可以按照建议通过调用Attribute.GetCustomAttributes
方法进行检查
var propertyInfo = typeof(DerivedA).GetProperties()[0];
var attributes = Attribute.GetCustomAttributes(propertyInfo);
在C#.Net中找到工作项目目录 - c#我用过Directory.getCurrentDirectory();它只给C:\ Windows \ SysWOW64但是我需要获取Visual Studio默认项目文件夹,我该如何获取?例如:C:\ Users \ knallasi \ Documents \ Visual Studio 2010 \ Projects \ SampleApp我们如何在项…
在C#中实现Comet服务器 - c#我想知道是否可以用C#编写彗星服务器。我有一个C#代码,可以定期生成数据,我想将这些数据推送到Java应用程序。所以想将我的C#代码转换为彗星服务器。还想知道是否有实现的彗星服务器,使我们可以将C#应用程序和java应用程序连接到它,以便C#应用程序可以通过彗星服务器将信息传递给java应用程序。数据推送频率会很高,但是单个消息的大小非常小:字符串值。 参考…
在C#中,基本构造函数调用中的一种用法如何解决多个枚举警告? - c#以下代码向我警告了IEnumerable可能的多个枚举:public ClassName(IEnumerable<OtherClassName> models) : base(models) { _models.AddRange(models); } 由于“基本”调用,消除此警告的常规解决方案不起作用。我无法转换为列表,因为没有地方可以存储该列表…
在C#中,如果关联的catch块引发异常,是否可以强制控制通过finally块? - c#我知道在Java中,如果catch子句捕获了异常,并且其catch块引发了异常,则控制将在线程终止之前传递与关联的finally块(如果有)。但是,在C#中似乎并非如此。可以通过在try-catch语句的try块中放入try-finally语句和引发异常的catch块,来在C#中几乎反映出这种行为,但是,例如,如果finally块应该包含处理应记录异常的St…
字段初始化程序访问“this”:在C#中无效,在Java中有效? - c#Improve this question 一,简介:这段代码:class C { int i = 5; byte[] s = new byte[i]; } 无法编译,并出现以下错误: 字段初始值设定项不能引用非静态字段,方法或属性“C.i”Resharper说类似的话:无法在静态上下文中访问非静态字段i。这与C# spec says一致-字段初始值设定项无…