質問

さて、これが事実である:

私はいくつかの静的な値で初期化する必要があり、一般的な基本クラスを得ました。これらの値は、私の一般的な基底クラスががロードされているタイプのようなものとは何の関係もありません。

私はこのような何かを行うことができるようにしたい。

GenericBaseclass.Initialize(AssociatedObject);

また、このようにやってクラスを持ちながらます:

public class DerivedClass : GenericBaseclass<int>
{
   ...
}

これを実現する方法はありますか?私は、非ジェネリック基底クラスを作成し、そこに静的メソッドを置くが、私は「ハック」ということが好きではありませんでした:)

役に立ちましたか?

解決

値は、一般的な基底クラスのタイプとは何の関係も持っていない場合は、

、その後、彼らは汎用の基本クラスであってはなりません。彼らはいずれかの完全に別のクラスにおいて、またはジェネリッククラスの非ジェネリック基底クラスであるべきである。

静的変数のために、あなたは型引数の組み合わせごとに異なる静的変数を取得することを念頭に置いてベアます:

using System;

public class GenericType<TFirst, TSecond>
{
    // Never use a public mutable field normally, of course.
    public static string Foo;
}

public class Test
{    
    static void Main()
    {
        // Assign to different combination
        GenericType<string,int>.Foo = "string,int";
        GenericType<int,Guid>.Foo = "int,Guid";
        GenericType<int,int>.Foo = "int,int";
        GenericType<string,string>.Foo = "string,string";


        // Verify that they really are different variables
        Console.WriteLine(GenericType<string,int>.Foo);
        Console.WriteLine(GenericType<int,Guid>.Foo);
        Console.WriteLine(GenericType<int,int>.Foo);
        Console.WriteLine(GenericType<string,string>.Foo);

    }
}
あなたがの中にを、それを持つことはできませんあなたのジェネリック基底クラス - あなたはが本当には汎用の基本クラスのTごとに異なる静的変数を使用しないように

これは聞こえますます。

他のヒント

それはまさにあなたがしなければならないものです。あなたは型パラメータを持っている場合は、タイプの異なる各インスタンス化は、の別々ののタイプです。これは、静的変数を分離するためにリードしています。

唯一の回避策は、ジェネリッククラスから派生する基本クラスを持つことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top