2017-01-05 3 views
0

Я хочу, чтобы реорганизовать этот класс для обработки нескольких типов объектовC#, как реорганизовать класс, добавив шаблон

public class MyClass : IMyClass 
{ 
    public void method() 
    { 
    IT obj= new ConcreteObject(); 
    //Some code 
    } 
} 

В это:

public class MyClass<T> : IMyClass 
    where T: IT, new() 
{ 
    public void method() 
    { 
    IT obj= new T(); 
    //Some code 
    } 
} 

Поскольку теперь больше функциональность доступна в новом ConcreteObject ,

Проблема в том, что многие проекты используют MyClass, и я не хочу, чтобы они менялись или даже знали, что произошли изменения.

Я просто хочу, чтобы значение по умолчанию T было ConcreteObject.

Как это следует обрабатывать?

+0

«Проблема заключается в том, что много проекта использовать этот класс, и я не хочу их чтобы изменить или даже знать, что произошло изменение ». В каком классе вы говорите? IMyClass или ConcreteObject? – Ouarzy

+0

@Ouarzy До сих пор ни одному проекту не известно о ConcreteObject, они используют только IMyClass. – Dolev

+0

Хорошие новости, иначе у вас не было бы никакого решения. Для этого я думаю, что ответ @Sefe сделает. – Ouarzy

ответ

4

Вы можете сделать общую версию MyClass промежуточной версией не-универсальной версии. До тех пор, как вы осторожны в процессе рефакторинга класса интерфейс необщего класса останется прежний:

public class MyClass<T> : IMyClass 
    where T: IT, new() 
{ 
    public void method() 
    { 
    IT obj= new T(); 
    //Some code 
    } 
} 

public class MyClass : MyClass<ConcreteObject> 
{ 
} 
+0

http://stackoverflow.com/users/6859983/sefe Я принял ваш ответ, потому что он понятен, прост и работает отлично. Спасибо! – Dolev

Смежные вопросы