オブジェクトのフィールドに追加のmetdataを追加するにはどうすればよいですか?

a.toraby

私は、誰もが私たちのオフィスに実装する必要がある抽象クラスノードを持っています:

public abstract class Node
{
    public abstract void run();
}

実装されたクラスには、少なくとも1つの入力プロパティと1つの出力プロパティも含まれている必要があります。次の例を見てください。

public class LineNode : Node
{
    public Point a;
    public Point b;
    public Line line;
    public override void run()
    {
        line = new Line(a, b);
    }
} 

このクラスabは、andは入力であり、lineは出力です。他のユーザーは、run()メソッドの本体を読むことで、どれが出力されているかを見つけることができます(ばかげていますね)。しかし、主な問題は、アプリケーションのどこかで、フィールドが入力であるか出力であるかを知る必要があることです。したがって、入力変数と出力変数をグラフィカルに表示できます。または、誰かがノードの外部に出力を割り当てようとした場合、またはコンパイル時にエラーを返した場合でも、例外をスローします。(プライベートキーワードを使用したくないので、すべてのフィールドをパブリックにする必要があります)。
最初は、フィールドを型付きでラップしようInput<T>としましたOutput<T>クラスなので、リフレクションを使用してノードのすべての出力フィールドを一覧表示することができました。しかし、そのように複雑になると誰もが不満を漏らしました。2行で単純なintプロパティを作成する必要があったため:

Output<int> out = new Output<int>();
out.value = 10;

このようなものをc#で書くことは可能ですか?

public class LineNode : Node
{
    [Input]
    public Point a;
    [Input]
    public Point b;
    [Output]
    public Line output_line;
    public override void run()
    {
        output_line = new Line(a, b);
    }
}

したがって、誰かが属性を変数ではなく型にのみ適用できることを知っているときはいつでも、私はこのようなことを頭に入れていたので、誰もが新しいノードを書くことを楽しむことができます。

デニス・ヤルコボイ

もちろん、コードの最後のブロックで書いたのと同じように属性を使用できます。そのためには、次のクラスを宣言する必要があります。

[AttributeUsage(AttributeTargets.Field)]
public class Input:Attribute
{
}
[AttributeUsage(AttributeTargets.Field)]
public class Output:Attribute
{
}

次に、リフレクションを使用してフィールドの属性を取得できます。

var isInput = Attribute.IsDefined(typeof(LineNode).GetField(fieldName), typeof(Input))

var isOutput = Attribute.IsDefined(typeof(LineNode).GetField(fieldName), typeof(Output))

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ElasticSeachのネストされたオブジェクトに新しいフィールドを追加するにはどうすればよいですか?

分類Dev

NodeJSのJSONでオブジェクトのすべてのフィールドを追加するにはどうすればよいですか?

分類Dev

ループなしでJavascript配列の各オブジェクトにフィールドを追加するにはどうすればよいですか?

分類Dev

メソッドとフィールドをリテラルオブジェクトに追加するにはどうすればよいですか?

分類Dev

jqコマンドを使用してJSONオブジェクトにフィールドを追加するにはどうすればよいですか?

分類Dev

ehcacheを使用してキャッシュにオブジェクト配列を追加するにはどうすればよいですか?各オブジェクトには複数のフィールドがありますか?

分類Dev

Javascriptで1つのオブジェクトからフィールドを取得し、それらを別のオブジェクトに追加するにはどうすればよいですか?

分類Dev

すべてのオブジェクトのJSONにルートノードを追加するにはどうすればよいですか?

分類Dev

gnuplotのキー/凡例にオブジェクトを追加するにはどうすればよいですか?

分類Dev

オブジェクトのフィールドのng-repeatにフィルターを適用するにはどうすればよいですか?

分類Dev

オブジェクト内の配列フィールドのフィールドを除外するにはどうすればよいですか?

分類Dev

動的オブジェクトのフィールドに数値を追加し、lodashを使用して空のフィールドを削除するにはどうすればよいですか?

分類Dev

オブジェクトフィット:カバースタイルをIEブラウザに追加するにはどうすればよいですか?

分類Dev

オブジェクトのリストをFirestoreに追加するにはどうすればよいですか?

分類Dev

オブジェクト内のキーの値である配列にオブジェクトを追加するにはどうすればよいですか?

分類Dev

useEffectフックでオブジェクトの単一のフィールドのみを監視するにはどうすればよいですか?

分類Dev

オブジェクトの配列を別のオブジェクトの配列でフィルタリングし、結果の配列にキー/値を追加するにはどうすればよいですか?

分類Dev

特定のフィールドに基づいてリストから重複オブジェクトを削除し、削除する前に数量を追加するにはどうすればよいですか?

分類Dev

LINKフィールドのグラフィックオブジェクトのサイズを変更するにはどうすればよいですか?

分類Dev

Entity Framework 6.1で子オブジェクトの特定のフィールドのみをロードするにはどうすればよいですか?

分類Dev

オブジェクトの属性にオブジェクトプロパティを追加するにはどうすればよいですか?

分類Dev

あるJSオブジェクトのデータを別のオブジェクトに追加するにはどうすればよいですか?

分類Dev

同じレベルの別のjsonオブジェクトにjsonオブジェクトを追加するにはどうすればよいですか?

分類Dev

リフレクションを使用してリストフィールドを識別し、そのリストに新しいオブジェクトを追加するにはどうすればよいですか?

分類Dev

個々のオブジェクトをdjangohaystackに追加するにはどうすればよいですか?

分類Dev

オブジェクトの配列をchartjsに追加するにはどうすればよいですか?

分類Dev

この配列にオブジェクトを追加するにはどうすればよいですか?

分類Dev

jsonオブジェクトの空白に_を追加するにはどうすればよいですか?

分類Dev

このオブジェクトを配列に追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    ElasticSeachのネストされたオブジェクトに新しいフィールドを追加するにはどうすればよいですか?

  2. 2

    NodeJSのJSONでオブジェクトのすべてのフィールドを追加するにはどうすればよいですか?

  3. 3

    ループなしでJavascript配列の各オブジェクトにフィールドを追加するにはどうすればよいですか?

  4. 4

    メソッドとフィールドをリテラルオブジェクトに追加するにはどうすればよいですか?

  5. 5

    jqコマンドを使用してJSONオブジェクトにフィールドを追加するにはどうすればよいですか?

  6. 6

    ehcacheを使用してキャッシュにオブジェクト配列を追加するにはどうすればよいですか?各オブジェクトには複数のフィールドがありますか?

  7. 7

    Javascriptで1つのオブジェクトからフィールドを取得し、それらを別のオブジェクトに追加するにはどうすればよいですか?

  8. 8

    すべてのオブジェクトのJSONにルートノードを追加するにはどうすればよいですか?

  9. 9

    gnuplotのキー/凡例にオブジェクトを追加するにはどうすればよいですか?

  10. 10

    オブジェクトのフィールドのng-repeatにフィルターを適用するにはどうすればよいですか?

  11. 11

    オブジェクト内の配列フィールドのフィールドを除外するにはどうすればよいですか?

  12. 12

    動的オブジェクトのフィールドに数値を追加し、lodashを使用して空のフィールドを削除するにはどうすればよいですか?

  13. 13

    オブジェクトフィット:カバースタイルをIEブラウザに追加するにはどうすればよいですか?

  14. 14

    オブジェクトのリストをFirestoreに追加するにはどうすればよいですか?

  15. 15

    オブジェクト内のキーの値である配列にオブジェクトを追加するにはどうすればよいですか?

  16. 16

    useEffectフックでオブジェクトの単一のフィールドのみを監視するにはどうすればよいですか?

  17. 17

    オブジェクトの配列を別のオブジェクトの配列でフィルタリングし、結果の配列にキー/値を追加するにはどうすればよいですか?

  18. 18

    特定のフィールドに基づいてリストから重複オブジェクトを削除し、削除する前に数量を追加するにはどうすればよいですか?

  19. 19

    LINKフィールドのグラフィックオブジェクトのサイズを変更するにはどうすればよいですか?

  20. 20

    Entity Framework 6.1で子オブジェクトの特定のフィールドのみをロードするにはどうすればよいですか?

  21. 21

    オブジェクトの属性にオブジェクトプロパティを追加するにはどうすればよいですか?

  22. 22

    あるJSオブジェクトのデータを別のオブジェクトに追加するにはどうすればよいですか?

  23. 23

    同じレベルの別のjsonオブジェクトにjsonオブジェクトを追加するにはどうすればよいですか?

  24. 24

    リフレクションを使用してリストフィールドを識別し、そのリストに新しいオブジェクトを追加するにはどうすればよいですか?

  25. 25

    個々のオブジェクトをdjangohaystackに追加するにはどうすればよいですか?

  26. 26

    オブジェクトの配列をchartjsに追加するにはどうすればよいですか?

  27. 27

    この配列にオブジェクトを追加するにはどうすればよいですか?

  28. 28

    jsonオブジェクトの空白に_を追加するにはどうすればよいですか?

  29. 29

    このオブジェクトを配列に追加するにはどうすればよいですか?

ホットタグ

アーカイブ