泛型类的静态方法?

cwa*_*wap 8 c# generics static-methods

好的,情况就是这样:

我有一个通用的基类,我需要用一些静态值初始化.这些值与我的通用基类加载的类型无关.

我希望能够做到这样的事情:

GenericBaseclass.Initialize(AssociatedObject);
Run Code Online (Sandbox Code Playgroud)

同时也有一个类这样做:

public class DerivedClass : GenericBaseclass<int>
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?我可以创建一个非泛型的基类并将静态方法放在那里,但我不喜欢那个"hack":)

Jon*_*eet 18

如果值与通用基类的类型无关,则它们不应位于通用基类中.它们应该位于完全独立的类中,或者位于泛型类的非泛型基类中.

请记住,对于静态变量,每种类型的参数组合会得到一个不同的静态变量:

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);

    }
}
Run Code Online (Sandbox Code Playgroud)

这听起来像你不会真的想每一个不同的静态变量T的通用基类的-所以你不能把它你的通用基础类.


cas*_*One 7

这正是你必须要做的.如果您有类型参数,则该类型的每个不同实例都是单独的类型.这导致了单独的静态变量.

唯一的解决方法是拥有泛型类派生的基类.