8

さて、これはケースです:

いくつかの静的な値で初期化する必要がある一般的な基本クラスを取得しました。これらの値は、汎用ベースクラスがロードされる型の種類とは関係ありません。

私はこのようなことができるようにしたい:

GenericBaseclass.Initialize(AssociatedObject);

また、次のようなクラスを持っています:

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

これを達成する方法はありますか?非ジェネリックな基底クラスを作成してそこに静的メソッドを配置することもできますが、その「ハック」は好きではありません :)

4

2 に答える 2

20

値がジェネリック基本クラスの型とは何の関係もない場合、それらはジェネリック基本クラスにあるべきではありません。それらは、完全に別のクラスにあるか、ジェネリック クラスの非ジェネリック基本クラスにある必要があります。

静的変数の場合、型引数の組み合わせごとに異なる静的変数が得られることに注意してください。

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含めることはできません。

于 2009-03-31T20:08:38.063 に答える
8

それはまさにあなたがしなければならないことです。型パラメーターがある場合、型の異なるインスタンス化ごとに個別の型になります。これにより、静的変数が分離されます。

唯一の回避策は、ジェネリック クラスの派生元となる基本クラスを用意することです。

于 2009-03-31T20:09:36.173 に答える