从另一个类分配实例的方法?
我有一个名为SimObject
的定稿类。在这门课上,有一个名为Draw()
的公共职能。从另一个类分配实例的方法?
而不是在另一个新类中扩展和覆盖从SimObject
,我想分配一个方法来代替我的Main类中的Draw()
。 Main类创建SimObject
并保存它的一个实例。所以我该怎么做这样的事情:
public class Main {
public static void Main() {
//constructor
var obj = new SimObject();
obj.Draw = MyNewDrawMethod;
}
public void MyNewDrawMethod() {
//some code
}
}
这是可能的C#?
如果您不想继承它,但想要扩展它,则可以使用Extension Method。
public class MyList{
}
public static class MyZListExtesion
{
public static void DrawSomethingElse(this MyList obj)
{
// override Draw from here
}
}
和使用
新MYLIST()DrawSomethingElse();
它不允许您分配方法,但可以使用扩展方法添加功能。
public static class SimObjectExtensions
{
public static void Draw(this SimObject obj)
{
// some code
}
}
这将允许你使用Draw方法,好像它是SimObject
SimObject o = new SimObject();
o.Draw();
如果扩展方法与现有方法具有相同的名称和参数,则将调用现有的方法 - 因此这将无济于事。 – 2013-03-19 11:55:12
啊,我没有注意到对象已经有了一个'Draw'方法。如果他实际上需要“覆盖”,因为Draw是一些模板方法的一部分,或者听起来像是塞满了东西。有可能用反射做一些时髦的事情吗? – BenCr 2013-03-19 11:58:14
我认为你是对的 - 他塞满了。 – 2013-03-19 11:59:57
的一个实例的方法是通过它您密封或者是从你不能改变一个组件? – BenCr 2013-03-19 11:43:28
你已经在你的问题中将'sealed'改为'finalized'。你究竟是什么意思?它是“密封”吗?它可以继承吗?如果它不是'密封的',那么你可以简单地覆盖派生类中的'Draw'方法。 – 2013-03-19 11:45:13
它来自程序集。我无法访问代码。它被密封并最终确定。所以我无法真正扩展它。 – Carven 2013-03-19 11:45:24