ali*_*hoo 2 c# overriding partial
我需要在单独的程序集中部分定义一个类.实际上我需要部分重新定义一个类,它已经在用C++ Cli编写的程序集中定义,但这可能是一个不同的问题.
对于这种情况,所有用c#编写的代码,我在basenamespace程序集中都有一个基类定义
using System;
namespace BaseNameSpace
{
public class BaseClass
{
public int Num;
public double dNum;
public BaseClass(int s, double d)
{
Num = s;
dNum = d;
}
public virtual void Wrt()
{
Console.WriteLine("{0},{1}", Num, dNum);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我添加另一个名为derivedclassSpace的程序集项目,并声明从baseclass派生的derivedclass.我还为此项目添加了一个部分类定义.
using System;
using BaseNameSpace;
namespace BaseNameSpace
{
public partial class BaseClass
{
public void Mult()
{
Num *= 2;
}
}
}
namespace DerivedNameSpace
{
public class DerivedClass : BaseClass
{
public DerivedClass(int s)
: base(s, 0)
{
}
public override void Wrt()
{
Mult(); // mult line
base.Wrt();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我构建解决方案时,我得到了
'DerivedNameSpace.DerivedClass.Wrt()':找不到合适的方法来覆盖
如果我删除部分类行和多行,一切正常.
我使用的是部分关键字的概念吗?我怎样才能摆脱错误?
您无法跨程序集定义部分类.部分类(和部分方法)只是编译器功能,允许您跨文件拆分定义.编译程序集后,就会有一个类.你唯一真正的选择是从基类继承,添加你的函数,然后从这个新类继承更多的派生类.
但是,如果您要尝试的是将方法添加到现有类,则可以考虑使用扩展方法.虽然这实际上并没有将它本身添加到类中,但它确实允许您编写代码,就像它具有的那样.
namespace BaseNameSpace
{
public static class BaseClassExtensions
{
public static void Mult(this BaseClass instance)
{
instance.Num *= 2;
}
}
}
namespace DerivedNameSpace
{
public class DerivedClass : BaseClass
{
public DerivedClass(int s)
: base(s, 0)
{
}
public override void Wrt()
{
Mult(); // mult line
base.Wrt();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12241 次 |
| 最近记录: |