从另一个项目覆盖方法

时间:2012-04-19 10:18:10

标签: c# asp.net

我的解决方案和数据类项目中有一个网站 数据类引用到网站
现在我想要从数据类到网站的覆盖方法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()
    {
    }
}

但我的错误是

找不到合适的方法来覆盖

2 个答案:

答案 0 :(得分:2)

如果部分类定义的名称空间相同并且它们在同一个程序集中定义,则部分类定义仅定义相同的类。
在您的情况下,这两个标准都没有达到。

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

您可以通过多种方式实现此目的,一个非常简单的方法是给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; };

答案 1 :(得分:0)

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

虽然你的logFunction类都是partial,但它们位于不同的项目中,可能还有名称空间(你没有指定。)因此,两者只与名称有关,而与编译器无关。