从另一个类分配实例的方法?

问题描述:

我有一个名为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#?

+0

的一个实例的方法是通过它您密封或者是从你不能改变一个组件? – BenCr 2013-03-19 11:43:28

+0

你已经在你的问题中将'sealed'改为'finalized'。你究竟是什么意思?它是“密封”吗?它可以继承吗?如果它不是'密封的',那么你可以简单地覆盖派生类中的'Draw'方法。 – 2013-03-19 11:45:13

+0

它来自程序集。我无法访问代码。它被密封并最终确定。所以我无法真正扩展它。 – Carven 2013-03-19 11:45:24

如果您不想继承它,但想要扩展它,则可以使用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(); 
+0

如果扩展方法与现有方法具有相同的名称和参数,则将调用现有的方法 - 因此这将无济于事。 – 2013-03-19 11:55:12

+0

啊,我没有注意到对象已经有了一个'Draw'方法。如果他实际上需要“覆盖”,因为Draw是一些模板方法的一部分,或者听起来像是塞满了东西。有可能用反射做一些时髦的事情吗? – BenCr 2013-03-19 11:58:14

+0

我认为你是对的 - 他塞满了。 – 2013-03-19 11:59:57