.net 在dotnet中使用注释

.net 在dotnet中使用注释,.net,c#-4.0,annotations,custom-attributes,.net,C# 4.0,Annotations,Custom Attributes,我从未使用过C#属性,但我知道它们大致相当于Java注释 如果我继续使用属性替换注释的端口,我需要知道什么?什么是一样的?不同?什么会咬我 至于我的研究,我发现 C#使用编译时符号驱动的ConditionalAttribute属性 我只是想知道我们是否可以自己写注释 哪些版本的dotnet支持它 如果我有任何样品或文件需要阅读,我们将不胜感激 等待您有价值的回复和评论是的,您可以编写自己的属性-您只需继承属性,即 public class FooAttribute : Attribute {

我从未使用过C#属性,但我知道它们大致相当于Java注释

如果我继续使用属性替换注释的端口,我需要知道什么?什么是一样的?不同?什么会咬我

至于我的研究,我发现

C#使用编译时符号驱动的ConditionalAttribute属性

我只是想知道我们是否可以自己写注释 哪些版本的dotnet支持它

如果我有任何样品或文件需要阅读,我们将不胜感激


等待您有价值的回复和评论

是的,您可以编写自己的属性-您只需继承
属性
,即

public class FooAttribute : Attribute {
    public int Bar {get;set;}
}
然后您可以附加:

[Foo(Bar=12)]
public int X {get;set;}
(如果您想限制它可以应用于什么,请参见
AttributeUsageAttribute
,例如类、字段、接口等)

请注意,虽然某些属性(
ConditionalAttribute
ObsoleteAttribute
等)对编译器有意义,但您不能使用属性编写自己的编译时功能,除非通过第三方工具(如PostSharp)。您可以做的是在运行时通过反射检查属性(特别是,
attribute.GetCustomAttribute[s]
),并用代码做出相应的反应。大多数属性都是通过反射以这种方式使用的

foreach(var prop in type.GetProperties()) {
    var foo = (FooAttribute)Attribute.GetCustomAttribute(
                        prop, typeof(FooAttribute));
    if(foo != null) {
        Console.WriteLine("{0} has Foo.Bar: {1}", prop.Name, foo.Bar);
    }
}

NET的所有版本都支持属性,尽管在某些有限的框架中,如果不需要,您可能会发现某些BCL属性丢失。例如,
DataContractAttribute
不支持WCF的平台上不存在通过
DataContractSerializer

是的,您可以编写自己的属性-您只需从
属性
继承即可

public class FooAttribute : Attribute {
    public int Bar {get;set;}
}
然后您可以附加:

[Foo(Bar=12)]
public int X {get;set;}
(如果您想限制它可以应用于什么,请参见
AttributeUsageAttribute
,例如类、字段、接口等)

请注意,虽然某些属性(
ConditionalAttribute
ObsoleteAttribute
等)对编译器有意义,但您不能使用属性编写自己的编译时功能,除非通过第三方工具(如PostSharp)。您可以做的是在运行时通过反射检查属性(特别是,
attribute.GetCustomAttribute[s]
),并用代码做出相应的反应。大多数属性都是通过反射以这种方式使用的

foreach(var prop in type.GetProperties()) {
    var foo = (FooAttribute)Attribute.GetCustomAttribute(
                        prop, typeof(FooAttribute));
    if(foo != null) {
        Console.WriteLine("{0} has Foo.Bar: {1}", prop.Name, foo.Bar);
    }
}

NET的所有版本都支持属性,尽管在某些有限的框架中,如果不需要,您可能会发现某些BCL属性丢失。例如,
DataContractAttribute
在不支持通过
DataContractSerializer

进行WCF的平台上不存在。NET属性和Java注释具有类似的用途

从v1.1开始的所有版本都支持.NET中的属性

有关某些历史记录的更多详细信息:


是的,您可以在.NET中编写自己的属性。(当然,您必须在自己的代码中处理它们——否则什么也不会发生(除非您对现有属性之一进行子类化以修改其行为)。

.NET属性和Java注释也有类似的用途

从v1.1开始的所有版本都支持.NET中的属性

有关某些历史记录的更多详细信息:


是的,您可以在.NET中编写自己的属性(当然,您必须在自己的代码中处理它们,否则什么也不会发生(除非您将现有属性的一个子类化以修改它们的行为).

谢谢你的发帖。你能给我提供一些使用注释的程序链接吗?@Gowthammanju你是说使用它们吗?添加了示例-这就是你的意思吗?谢谢在进入c#中的当前类之前,是否可以使用注释转到某个特定类。net@Gowthammanju你必须说得更具体些,但是:如果你的意思是“当调用这个类型/属性/etc时,我能让这个属性自动执行代码吗”,然后是否定的,不是常规的.NET;但是,像PostSharp这样的“AOP”工具(如上所述)允许这种类型的使用。如果没有像PostSharp这样的工具,属性是元数据,而不是自动的代码注入点。例如,我可以向
FooAttribute
添加一个方法,但我需要获得
FooAttribute
,如图所示,以便显式执行它。感谢您的支持@Marc gravel我已经使用了postsharp这样做,但我只是想知道我们是否可以在没有任何第三方工具提示的情况下实现发布。你能给我提供一些使用注释的程序链接吗?@Gowthammanju你是说使用它们吗?添加了示例-这就是你的意思吗?谢谢。在进入之前,是否可以使用注释转到某个特定的类c#中的当前类。net@Gowthammanju您必须更具体一些,但是:如果您的意思是“当调用此类型/属性/etc时,我是否可以使此属性自动执行代码”,那么不可以,不是常规的.NET;但是,像PostSharp这样的“AOP”工具(如上所述)允许这种类型的使用。如果没有像PostSharp这样的工具,属性是元数据,而不是自动的代码注入点。例如,我可以向
FooAttribute
添加一个方法,但我需要获得
FooAttribute
,如图所示,以便显式执行它。感谢您的支持@Marc gravel我已经使用了postsharp可以做到这一点,但我只是想知道我们是否可以在没有任何第三方工具的情况下实现