gpt4 book ai didi

c# - 找不到合适的方法来覆盖部分类的错误

转载 作者:行者123 更新时间:2023-11-30 20:11:13 25 4
gpt4 key购买 nike

我需要在单独的程序集中部分定义一个类。实际上我需要部分地重新定义一个类,它已经在用 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);
}
}
}

我添加了另一个名为 derivedclassSpace 的程序集项目,并声明了一个派生自基类的派生类。我还向该项目添加了部分类定义。

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();
}
}
}

当我构建解决方案时,我得到了

'DerivedNameSpace.DerivedClass.Wrt()': no suitable method found to override

如果我删除部分类线和多线,一切正常。
我在使用部分关键字的概念吗?我怎样才能摆脱这个错误?

最佳答案

您不能跨程序集定义分部类。分部类(和分部方法)只是允许您将定义拆分到文件 中的编译器功能。一旦程序集被编译,就有一个类。您唯一真正的选择是从基类继承,添加您的函数,然后让进一步的派生类继承这个新类。

但是,如果您要做的只是向现有类添加方法,则可以考虑使用扩展方法。虽然这实际上并没有将其添加到类本身,但它确实允许您编写代码,就好像它已经添加了一样。

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();
}
}
}

关于c# - 找不到合适的方法来覆盖部分类的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4052850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com