1

有没有办法覆盖部分类中的现有方法?

像这样的东西(我知道这不会编译)

/// <summary>
/// Generated Code for MyClass
/// </summary>
public partial class MyClass
{
    public void MyMethod()
    {
        //Do work specific to MyClass
    }
}

/// <summary>
/// Non-generated extension for MyClass
/// </summary>
public partial class MyClass
{
    public override void MyMethod()
    {
        //Do some other work
    }
}

我在进行一些代码生成时遇到了这种需求。我从我的 EDMX 和这些类的方法生成部分类,其中 90% 的类将具有特定于其属性的方法。

但是我遇到了我想要一次性方法的情况。

我忽略了这样的事情吗?或者一些建议的替代品?

4

3 回答 3

1

您可以为此使用部分方法。如果您需要更改签名等,我假设您可以在此处推断。

还值得注意的是,如果您定义了一个部分方法并且没有人在该类的另一个部分位中定义它的实现,它只会变成无操作,而不是错误,因此您无需担心会导致问题. 它实际上是为这个用例而构建的。

/// <summary>
/// Generated Code for MyClass
/// </summary>
public partial class MyClass
{
    private partial void MyMethodImpl();
    public void MyMethod()
    {
        //Do work specific to MyClass

        MyMethodImpl();
    }
}

/// <summary>
/// Non-generated extension for MyClass
/// </summary>
public partial class MyClass
{
    public void MyMethodImpl()
    {
        //Do some other work
    }
}
于 2012-04-05T14:43:28.673 回答
1

我们在代码库中广泛使用带有标记扩展点的双重派生模式。 http://msdn.microsoft.com/en-us/library/bb126289(v=vs.100).aspx

生成的代码如下所示:

public abstract class FooBase
{
   protected FooBase()
   {
   }
   public virtual int GetSomeThing()
   {
      // ... some generated implementation ...
   }
}

public partial class Foo
{
   public Foo() : FooBase()
   {
   }
   // Nothing except the constructor generated in this class.
}

然后,我们偶尔会通过生成不编译的方法来标记它们对手动代码的需求,并带有一个大注释,为所需的手动代码提供存根实现。已经相当成功了。

于 2012-04-05T19:16:02.763 回答
0

为什么不从生成的类派生并覆盖派生类中的方法?

于 2012-04-05T14:50:08.807 回答