C#类似Java的内联类扩展?

Ozz*_*zah 3 c# overriding inline

我会在谷歌/ MSDN上查看,但我不知道它叫什么,所以我在这里问.

在Java中,我似乎记得你可以做这个非常酷的事情:

Class MyClass
{
  int number;

  MyClass() { }

  void setNumber(int number)
  {
    this.number = number;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后做类似的事情:

MyClass myClass = new MyClass()
  {
    override void setNumber(int Number)
    {
      this.number = 2 * number;
    }
  };
Run Code Online (Sandbox Code Playgroud)

...或者其他的东西.原谅我上面犯的任何错误 - 我在大约6年内没有碰到过Java.

关键是,我记得你可以伪内联一个类.

现在,我需要扩展一个C#WinForms控件,但我只需要使用一次,并且修改非常小.我需要做的就是覆盖CreateParams属性和OnPaint()处理程序.

我的解决方案已经变得越来越大,所有的类都是如此,包含另一个基本上与标准.Net控件相同的类似乎是一种耻辱,只是行为略有不同.

是否可以像在Java中一样在C#中进行内联扩展?如果是这样,怎么样?(它叫什么,所以我可以在MSDN上查找它?)

小智 5

在C#3/4中无法实现这种(显式的主格匿名类型).

必须显式创建类型然后构造.使用Events和Delegates(类调用提供诸如"NeedDataSource"之类的实现的事件),C#中的任务有时会被"反转" - 可以说是因为这个,尽管它在许多情况下才有意义.

如果可以创建明确的非主格类型:var x = new { P = 1, };但仅限于本地范围.隐式方法包括delegates/lambdas/anonymous函数,这里不适用.

快乐的编码.