2

私は C# 属性を使用したことはありませんが、それらが Java 注釈とほぼ同等であることは理解しています。

注釈を置き換えるために属性を使用して移植を進める場合、何を知る必要がありますか? 何が同じになるのですか?違う?何が私を噛むつもりですか?

私の研究に関しては、私はそれを見つけました

C# は、コンパイル時のシンボルから駆動されるConditionalAttribute属性を使用します

独自に注釈を記述できるかどうか、およびどのバージョンの dotnet がそれをサポートしているかを知りたいだけです。

サンプルやドキュメントを読んでいただければ幸いです

貴重なご意見・ご感想お待ちしております

4

2 に答える 2

3

はい、独自の属性を作成できますAttribute。つまり、から継承するだけです。

public class FooAttribute : Attribute {
    public int Bar {get;set;}
}

次に、それを添付できます:

[Foo(Bar=12)]
public int X {get;set;}

AttributeUsageAttribute適用できるものを制限したい場合も参照してください-たとえば、クラス、フィールド、インターフェースなど)

一部の属性 ( ConditionalAttributeObsoleteAttributeなど) はコンパイラにとって意味がありますが、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

于 2012-06-07T05:59:29.860 に答える
1

.NET 属性と Java 注釈は、同様の目的を果たします。

.NET の属性は、v1.1 以降のすべてのバージョンでサポートされています。

いくつかの歴史の詳細: .NET 属性と Java 注釈: どちらが最初に来たか?

はい、.NET で独自の属性を作成できます。(もちろん、独自のコードでそれらを処理する必要があります。そうしないと、(既存の属性の 1 つをサブクラス化してその動作を変更しない限り) 何も起こりません)。

于 2012-06-07T06:01:49.467 に答える