重写另一个项目中的方法

本文关键字:方法 项目 另一个 重写 | 更新日期: 2023-09-27 18:31:49

我的解决方案中有一个网站和一个数据类项目
数据类引用到网站
现在我想将方法 A 从数据类覆盖到网站
我认为这是可能的,因为编译后数据类是网站中的DLL

我的数据类 :

public partial class forInherit
{
    public virtual int getUserID()
    {
        return 0;
    }
}
public partial class logFunctions : forInherit
{
}

和我的网站:

public partial class logFunctions
{
    public override int getUserID()
    {
    }
}

但我的错误是

找不到合适的方法来覆盖

重写另一个项目中的方法

仅当分部类定义的命名空间相同并且它们在同一程序集中定义时,分部类定义才定义相同的类。
在您的案例中,这两个条件都不满足。

如果我正确理解您的意图,您希望为数据类的使用者提供更改getUserID()方法行为的可能性,同时仍使用数据类项目中的类logFunctions

您可以通过多种方式实现此目的,一种非常简单的方法是为logFunctions提供一个在调用getUserID()时调用的委托。另一种可能性是引入传递给logFunctions的接口。

第一个选项的示例:

在数据项目中:

public class forInherit
{
    public virtual int getUserID()
    {
        return 0;
    }
}
public class logFunctions : forInherit
{
    public Func<int> GetUserIDDelegate { get; set; }
    public override int getUserID()
    {
        if(GetUserIDDelegate == null)
            return 0;
        return GetUserIDDelegate();
    }
}

在您的 Web 项目中:

logFunctionsInstance.GetUserIDDelegate = () => { return 1; };
网站

中的logFunction类需要继承数据类项目中的forInherit类。

虽然您的两个logFunction类都是partial但它们位于不同的项目中,并且可能位于命名空间中(您未指定)。因此,两者仅通过名称而不是编译器相关。