是否可以将对象"转换"为更专业的对象?

uli*_*i78 0 .net c# inheritance

问题是我需要一个我无法改变的类对象的额外功能(我正在尝试添加数据绑定支持).我能想到的最佳解决方案是使用此功能编写派生类.所以我可以使用这个类instate的对象.所以现在的问题是,如何初始化新类的对象?我可以使用原始对象作为参数创建一个构造函数,并使用此对象的值初始化派生对象,但对我来说,这似乎不是最聪明的解决方案.如果我可以这样做,那将是很好的:

// MyDerivedClass is derived from ObjectOfAnUnchangeableClass.
MyDerivedClass Obj = ObjectOfAnUnchangeableClass as MyDerivedClass;  
Run Code Online (Sandbox Code Playgroud)

因为这不起作用,因为ObjectOfAnUnchangeableClass不知道MyDerivedClass.另一个想法是拥有一个可以用对象"初始化"的构造函数.就像是:

public MyDerivedClass(UnchangeableClass obj): base(obj){}
Run Code Online (Sandbox Code Playgroud)

这里的想法是,不要让基础构造函数构建一个新对象; 它可以只取现有的对象.

所以我有两个问题:

  1. 在.net中是否有一些概念支持上面提到的内容?
  2. 在一个无法更改的类中有一些额外功能的最佳解决方案是什么?

Ste*_*ock 6

您自己刚刚回答了这个问题 - 执行此操作的"标准"方法是在派生类的构造函数中获取基类的实例.这是装饰模式的一个例子

来自维基百科页面

在面向对象的编程中,装饰器模式是一种设计模式,允许动态地将新/附加行为添加到现有类.