对象的C#包装器

对象的C#包装器,c#,wrapper,C#,Wrapper,我正在寻找为任何对象创建通用包装的方法。 包装器对象的行为将与它包装的类一样,但将能够有更多的属性、变量、方法等,例如对象计数、缓存等 假设wrapper类被称为wrapper,要包装的类被称为Square,并且具有构造函数Square(double-edge_-len)和属性/方法EdgeLength和Area,我想如下使用它: Wrapper<Square> mySquare = new Wrapper<Square>(2.5); /* or */ new Squa

我正在寻找为任何对象创建通用包装的方法。
包装器对象的行为将与它包装的类一样,但将能够有更多的属性、变量、方法等,例如对象计数、缓存等

假设wrapper类被称为wrapper,要包装的类被称为Square,并且具有构造函数Square(double-edge_-len)和属性/方法EdgeLength和Area,我想如下使用它:

Wrapper<Square> mySquare = new Wrapper<Square>(2.5);  /* or */ new Square(2.5);
Console.Write("Edge {0} -> Area {1}", mySquare.EdgeLength, mySquare.Area);
Wrapper<Square> mySquare = new Wrapper<Square>(new Square(2.5));
Console.Write("Edge {0} -> Area {1}", mySquare.Object.EdgeLength, mySquare.Object.Area);
Wrapper mySquare=新包装(2.5);/*或*/新广场(2.5);
Write(“Edge{0}->Area{1}”,mySquare.EdgeLength,mySquare.Area);
显然,我可以为我想要包装的每个类创建这样的包装类,但我正在寻找一个通用的解决方案,即
wrapper
,它可以处理基本类型和复合类型(尽管在我目前的情况下,我很乐意包装我自己的类)

建议


谢谢。

使用或书写。

可能是这样的:

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

    public Wrapper(T t)
    {
        Object = t;
    }
}
公共类包装器
{
公共只读对象;
公共包装器(T)
{
对象=t;
}
}
然后你可以使用它如下:

Wrapper<Square> mySquare = new Wrapper<Square>(2.5);  /* or */ new Square(2.5);
Console.Write("Edge {0} -> Area {1}", mySquare.EdgeLength, mySquare.Area);
Wrapper<Square> mySquare = new Wrapper<Square>(new Square(2.5));
Console.Write("Edge {0} -> Area {1}", mySquare.Object.EdgeLength, mySquare.Object.Area);
Wrapper mySquare=新包装(新正方形(2.5));
Write(“Edge{0}->Area{1}”,mySquare.Object.EdgeLength,mySquare.Object.Area);

Castle项目可能是您的解决方案。

使用C#up 3.0无法做到这一点。然而,4.0版可能允许您通过新的动态类型系统来实现这一点。请详细说明一下?谢谢,谢谢,但这正是我想要避免的。我希望包装对T的用户是透明的。这个答案对我帮助很大:DThanks。我认为装饰器模式不合适,因为它们需要我更改整个程序来使用它们,我希望包装器对T的用户是透明的。关于扩展方法,您可以使用类似的方法向类(即每个对象)添加变量吗?还是仅方法?+1,是的-问题显然是寻找代理实现。DynamicProxy在.NET开源世界中被广泛使用(NMock2、NHibernate、Ninject等都使用它)。唯一重要的警告是,您将无法对密封类使用代理。谢谢!这看起来真的像是我一直在寻找的解决方案(尽管我还需要深入研究)。