C#では、クラスの継承距離を基本クラスに取得するにはどうすればよいですか?

シモン

例:次のクラスがあります。

public class A {}
public class B:A {}
public class C:B {}
public class D:C {}

(D.IsSubclassOf(B)をテストする代わりに)基本クラスまでの階層距離を取得して、DがAに近いか、BがAに近いかを判断するような便利な方法がある場合は、

ティムシュメルター

多分これは何か助けになります:

public static int? GetDegreeOfRelationship(Type typeA, Type typeB)
{
    if (typeA.IsInterface || typeB.IsInterface) return null; // interfaces are not part of the inheritance tree
    if (typeA == typeB) return 0;

    int distance = 0;
    Type child;
    if (typeA.IsAssignableFrom(typeB))
    {
        child = typeB;
        while ((child = child.BaseType) != typeA)
            distance--;
        return --distance;
    }
    else if(typeB.IsAssignableFrom(typeA))
    {
        child = typeA;
        while ((child = child.BaseType) != typeB)
            distance++;
        return ++distance;
    }
    else
       return null;
}

使用法:

int? distance = GetDegreeOfRelationship(typeof(A), typeof(D));      // -3
int? distance = GetDegreeOfRelationship(typeof(D), typeof(A));      //  3
int? distance = GetDegreeOfRelationship(typeof(B), typeof(B));      //  0
int? distance = GetDegreeOfRelationship(typeof(D), typeof(string)); // null

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

C#では、クラスの継承距離を基本クラスに取得するにはどうすればよいですか?

分類Dev

継承で特定の基本クラスを取得するにはどうすればよいですか?

分類Dev

継承するときに基本クラスのコピーを作成しないようにするにはどうすればよいですか?C ++

分類Dev

すべての変数を親クラスからinit関数を持つ基本クラスに継承するにはどうすればよいですか?

分類Dev

(C ++)継承時に子クラスを削除した後に基本クラスを削除するにはどうすればよいですか?

分類Dev

継承、2つのクラスに同じ基本クラスの内容を共有させるにはどうすればよいですか?

分類Dev

C ++では、クラスが継承チェーンの最後のクラス/子であるかどうかを確認するにはどうすればよいですか?つまり、基本クラスの反対側にあります

分類Dev

親クラスのすべての機能を継承するにはどうすればよいですか?

分類Dev

基本クラスで派生クラス属性を使用するにはどうすればよいですか?C#

分類Dev

クラスタリングの距離関数を指定するにはどうすればよいですか?

分類Dev

2つのクラスからUITextFieldを継承するにはどうすればよいですか?

分類Dev

VueJSの小道具-「クラス」属性の継承を回避するにはどうすればよいですか?

分類Dev

すべての要素に基本クラスから1つの特定のプロパティを継承させるにはどうすればよいですか?

分類Dev

次のクラス継承を設計するにはどうすればよいですか?

分類Dev

非直接基本クラスからコンストラクターを継承するにはどうすればよいですか?

分類Dev

継承クラスで使用するために基本テスト環境を設定するにはどうすればよいですか?

分類Dev

Perlオブジェクト(クラスではない)の構造と継承履歴を取得するにはどうすればよいですか?

分類Dev

メタクラスで多重継承を使用するにはどうすればよいですか?

分類Dev

MatlabでTCPIPクラスを正しく継承するにはどうすればよいですか?

分類Dev

(すでに存在する)クラスに別のクラスを継承させるにはどうすればよいですか?

分類Dev

基本クラスから継承されていない列を一覧表示するにはどうすればよいですか?

分類Dev

基本クラスから派生クラス名を取得するにはどうすればよいですか?

分類Dev

QTableWidgetとクラスMainWindowを継承するにはどうすればよいですか?

分類Dev

継承可能なクラス変数を作成するにはどうすればよいですか?

分類Dev

Rubyの継承された親メソッドでChildクラスを取得するにはどうすればよいですか?

分類Dev

多重継承を使用していくつかの親クラス属性値を取得するにはどうすればよいですか?

分類Dev

C ++の継承されたクラスで通常のメソッドを静的メソッドに変更するにはどうすればよいですか?

分類Dev

Rのkmeansからクラスター距離空間を取得するにはどうすればよいですか?

分類Dev

特定の変数をあるクラスから別のクラスに継承するにはどうすればよいですか?

Related 関連記事

  1. 1

    C#では、クラスの継承距離を基本クラスに取得するにはどうすればよいですか?

  2. 2

    継承で特定の基本クラスを取得するにはどうすればよいですか?

  3. 3

    継承するときに基本クラスのコピーを作成しないようにするにはどうすればよいですか?C ++

  4. 4

    すべての変数を親クラスからinit関数を持つ基本クラスに継承するにはどうすればよいですか?

  5. 5

    (C ++)継承時に子クラスを削除した後に基本クラスを削除するにはどうすればよいですか?

  6. 6

    継承、2つのクラスに同じ基本クラスの内容を共有させるにはどうすればよいですか?

  7. 7

    C ++では、クラスが継承チェーンの最後のクラス/子であるかどうかを確認するにはどうすればよいですか?つまり、基本クラスの反対側にあります

  8. 8

    親クラスのすべての機能を継承するにはどうすればよいですか?

  9. 9

    基本クラスで派生クラス属性を使用するにはどうすればよいですか?C#

  10. 10

    クラスタリングの距離関数を指定するにはどうすればよいですか?

  11. 11

    2つのクラスからUITextFieldを継承するにはどうすればよいですか?

  12. 12

    VueJSの小道具-「クラス」属性の継承を回避するにはどうすればよいですか?

  13. 13

    すべての要素に基本クラスから1つの特定のプロパティを継承させるにはどうすればよいですか?

  14. 14

    次のクラス継承を設計するにはどうすればよいですか?

  15. 15

    非直接基本クラスからコンストラクターを継承するにはどうすればよいですか?

  16. 16

    継承クラスで使用するために基本テスト環境を設定するにはどうすればよいですか?

  17. 17

    Perlオブジェクト(クラスではない)の構造と継承履歴を取得するにはどうすればよいですか?

  18. 18

    メタクラスで多重継承を使用するにはどうすればよいですか?

  19. 19

    MatlabでTCPIPクラスを正しく継承するにはどうすればよいですか?

  20. 20

    (すでに存在する)クラスに別のクラスを継承させるにはどうすればよいですか?

  21. 21

    基本クラスから継承されていない列を一覧表示するにはどうすればよいですか?

  22. 22

    基本クラスから派生クラス名を取得するにはどうすればよいですか?

  23. 23

    QTableWidgetとクラスMainWindowを継承するにはどうすればよいですか?

  24. 24

    継承可能なクラス変数を作成するにはどうすればよいですか?

  25. 25

    Rubyの継承された親メソッドでChildクラスを取得するにはどうすればよいですか?

  26. 26

    多重継承を使用していくつかの親クラス属性値を取得するにはどうすればよいですか?

  27. 27

    C ++の継承されたクラスで通常のメソッドを静的メソッドに変更するにはどうすればよいですか?

  28. 28

    Rのkmeansからクラスター距離空間を取得するにはどうすればよいですか?

  29. 29

    特定の変数をあるクラスから別のクラスに継承するにはどうすればよいですか?

ホットタグ

アーカイブ