1

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

我的数据类:

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

public partial class logFunctions : forInherit
{
}

和我的网站:

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

但我的错误是

找不到合适的方法来覆盖

4

2 回答 2

2

如果部分类定义的命名空间相同并且它们在同一个程序集中定义,则部分类定义仅定义相同的类。
您的情况不符合这两个标准。

如果我正确理解您的意图,您希望让数据类的使用者能够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();
    }
}

在您的网络项目中:

logFunctionsInstance.GetUserIDDelegate = () => { return 1; };
于 2012-04-19T10:21:33.197 回答
0

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

虽然您的两个logFunction类都partial位于不同的项目中,并且可能位于命名空间(您没有指定)。因此,两者仅按名称相关,而不与编译器相关。

于 2012-04-19T10:23:33.517 回答