C # обертка для объектов - PullRequest
5 голосов
/ 28 мая 2010

Я ищу способ создания универсальной обертки для любого объекта.
Объект-обертка будет вести себя так же, как класс, который он оборачивает, но сможет иметь больше свойств, переменных, методов и т. Д. Длянапример, подсчет объектов, кеширование и т. д.

Скажите, что класс-оболочка будет называться Wrapper , а класс, который будет упакован, будет называться Square и имеет конструктор Square(double edge_len) и свойства / методы EdgeLength и Площадь , я хотел бы использовать его следующим образом:

Wrapper<Square> mySquare = new Wrapper<Square>(2.5);  /* or */ new Square(2.5);
Console.Write("Edge {0} -> Area {1}", mySquare.EdgeLength, mySquare.Area);

Очевидно, я могу создатьтакой класс-обертку для каждого класса, который я хочу обернуть, но я ищу общее решение, например Wrapper<T>, которое может обрабатывать как примитивные, так и составные типы (хотя в моей текущей ситуации я был бы рад просто обернуть свои собственные классы).

Предложения?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 28 мая 2010

Используйте Шаблон декоратора или напишите методы расширения .

2 голосов
/ 28 мая 2010

DynamicProxy из проекта Castle может быть решением для вас.

2 голосов
/ 28 мая 2010

Может быть, что-то вроде этого:

public class Wrapper<T>
{
    public readonly T Object;

    public Wrapper(T t)
    {
        Object = t;
    }
}

И тогда вы можете использовать его следующим образом:

Wrapper<Square> mySquare = new Wrapper<Square>(new Square(2.5));
Console.Write("Edge {0} -> Area {1}", mySquare.Object.EdgeLength, mySquare.Object.Area);
...