2015-02-16 2 views
-3

Я использую общий код в C# 4.0. Это мой код:Определите общий класс в этом случае

public class Class1 
{ 
} 

public class SubClass1 : Class1 
{ 
} 

public class Class2 
{ 
} 

public class SubClass2 : Class2 
{ 
} 

public class GenericClass1<T1, T2> 
    where T1 : Class1 
    where T2 : Class2 
{ 
} 

public class MyClass1 : GenericClass1<SubClass1, SubClass2> 
{ 
} 

// error here 
public class GenericClass2<GenericClass1<T1, T2>> 
    where T1 : Class1 
    where T2 : Class2 
{ 
} 

public class MyClass2 : GenericClass2<MyClass1> 
{ 
} 

Я получил сообщение об ошибке при компиляции GenericClass2 «объявление параметров типа должно быть идентификатором не является типом». Любой поможет мне найти решение для этого случая родового. Благодарю.

+2

Там нет ничего, что мы могли бы работать с здесь. Вы не опубликовали свой полный код, вы не опубликовали то, что хотите, вы даже не опубликовали сообщение об ошибке. Ты можешь лучше. – nvoigt

+0

Прочитайте мой код, вы поймете мою цель. При компиляции вы получите ошибку. Мне нужна помощь, как решить ее при использовании generic –

+0

Что заставляет вас думать, что я открою VS и скомпилирую его для вас, когда у вас есть ошибка прямо перед вами и вы можете отправить ее здесь? – nvoigt

ответ

2

К сожалению, вы не можете использовать вложенные объявления в определениях классов, как это: GenericClass2<GenericClass1<T1, T2>>. Вы можете использовать такой код вместо:

public class GenericClass1<T1, T2> 
    where T1: Class1 
    where T2: Class2 
{ 
} 

public class MyClass1 : GenericClass1<SubClass1, SubClass2> 
{ 
} 

public class GenericClass2<T1, T2, T3> 
    where T1: Class1 
    where T2: Class2 
where T3:GenericClass1<T1, T2> 
{ 
} 

public class MyClass2 : GenericClass2<SubClass1, SubClass2, MyClass1> 
{ 
} 
+0

Это решение работает. Однако я должен повторить имя класса 2 раза. Как вы видите, MyClass1 использует из SubClass1 и SubClass2, но мы повторяем его снова в определении MyClass2 -> почему .net компиляция не может понять автоматически :( –

1

попробовать это:

public class GenericClass2<TGeneric, T1, T2> 
where TGeneric: GenericClass1<T1, T2> 
where T1 : Class1 
where T2 : Class2 
{ 
} 
2

Вы также можете использовать, как показано ниже -

public class Class1 
    { 
    } 

    public class SubClass1 : Class1 
    { 
    } 

    public class Class2 
    { 
    } 

    public class SubClass2 : Class2 
    { 
    } 

    public class GenericClass1<T1, T2> 
     where T1 : Class1 
     where T2 : Class2 
    { 
    } 

    public class MyClass1 : GenericClass1<SubClass1, SubClass2> 
    { 
    } 


    public class GenericClass2<U> 
     where U : GenericClass1<SubClass1, SubClass2> 
    { 
    } 

    public class MyClass2 : GenericClass2<MyClass1> 
    { 
    } 
Смежные вопросы