2009-03-31 5 views
5

그래,이 경우입니다 :일반 클래스의 정적 메서드?

일부 정적 값으로 초기화해야하는 일반 기본 클래스가 있습니다. 이 값은 제네릭 기본 클래스가로드되는 유형과 관련이 없습니다.

GenericBaseclass.Initialize(AssociatedObject); 

또한 클래스 같은 일을하면서 :

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

이 작업을 수행 할 수있는 방법이 있습니까를

나는 같은 것을 할 수 있도록하려면? 난 비 기본 baseclass 만들고 거기에 정적 메서드를 넣을 수 있지만 "해킹"을 좋아하지 않아 :)

+0

이미 지적한대로 비 일반 기본 클래스를 사용하는 유일한 방법은 아니지만 '해킹'이 아니라 실제 수행하는 올바른 방법입니다. –

답변

14

값이 제네릭 기본 클래스의 형식과 관련이 없다면, 그들은 shouldn 제네릭 기본 클래스에 있어야합니다. 그것들은 완전히 별개의 클래스이거나 generic 클래스의 비 제네릭 기본 클래스에 있어야합니다. 정적 변수를 들어, 형식 인수 조합에 따라 다른 정적 변수를 얻을

곰 염두에두고 : 당신이하지 정말이 일반의 T마다 다른 정적 변수를 원하는 것처럼

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

    } 
} 

소리가 난다 기본 클래스 - 일반 기본 클래스에 넣을 수 없습니다.

+0

"원하는 동작을 수행하는 유일한 방법"에서와 같이 "우수 사례"또는 "해야"와 같이 "해야할까요?" :) – cwap

+0

다른 유형 인수가 제공 되더라도 하나의 정적 변수 만 원한다면 "원하는 동작을 수행하는 유일한 방법"입니다. –

+0

명확히 해 주셔서 고마워요. 나는 그 일을 끝내야 했어. 미안해. 그래도 완벽한 의미를 갖습니다 :) - 자, 자러 가라. Know-it-all : P – cwap

6

그게 바로 당신이해야 할 일입니다. 형식 매개 변수가있는 경우 해당 유형의 인스턴스가 각각 유형으로 분리됩니다. 이것은 별도의 정적 변수로 연결됩니다.

유일한 해결 방법은 제네릭 클래스가 파생 된 기본 클래스를 사용하는 것입니다.

관련 문제