2009-11-05 2 views
0

Я пытался понять некоторые посты похожи, но не совсем понимает, их цели и думал, что я объясню мой ...Создания который получен типа класса во время выполнения

У меня есть class - полностью определяется кодом со свойствами и методами. Многие методы являются виртуальными, которые могут быть переопределены другим производным классом. Итак, у меня есть что-то вроде следующего

Class_Main 
    -- Class_A : Class_Main 
    -- Class_B : Class_Main 
    -- Class_C : Class_Main 
    -- Class_D : Class_Main 

тогда мне нужно определить еще один класс, который может быть динамически производный от AD ... такие как:

Class_X : Class_A (or Class_B or Class_C or Class_D) 

, как у меня есть дополнительные свойства и методы в классе Class_X. Поскольку C# не может выводиться из двух фактических классов, но может использовать интерфейсы, но вы не можете иметь код в интерфейсе, просто абстрактные подписи, как я могу заниматься такой реализацией.

Благодаря

+0

Как вы предполагаете создание объектов с использованием этой парадигмы? – jheddings

ответ

1

То, что вы описываете, звучит немного как duck typing. Это не доступно в C#, поскольку это статически типизированный язык. Возможно, когда появится C# 4, dynamic даст вам то, что вы ищете.

Если Class_X должен быть «заполнен» с функциональностью от тех классов, было бы общим передать, что в классе в момент создания экземпляра:

public class Class_X { 
    private Class_Main _impl; 
    public Class_X(Class_Main impl) { 
     _impl = impl; 
    } 
} 

Class_X classXA = new Class_X(new Class_A()); 
Class_X classXB = new Class_X(new Class_B()); 

На данный момент, ваши Class_X экземпляры имеют доступ к свойствам Class_Main & методов для всех производных классов. Это не делает агрегат Class_X, просто позволяет использовать поведение во время работы любого Class_Main с точностью до Class_X (через объект _impl).

+0

Это было то, о чем я думал, но не знал, есть ли другой способ ... тогда мои методы класса_X будут делать что-то вроде return _impl.SomeFunction (whateverParam) .. thanks – DRapp

0

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

Итак, теперь именно C#, просто прототипирования:

class ClassA { 
    public void FunctionClassA(...) { ... } 
    public void FunctionClassB(...) { ... } 
} 

class ClassX : ClassB { 
    private ClassA classa; 
    public ClassX() { 
    classa = new ClassA(); 
    } 
    public void FunctionClassA(...) { classa.FunctionClassA(...); } 
} 

Итак, ClassX теперь одна функция наследуется (по внешнему виду) от ClassA, и содержит все методы ClassB.

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