2012-04-19 237 views
0

我有我的解决方案和数据类项目网站
数据类参考网站
现在我想重写方法从数据类网站
我认为这是可能的,因为编译数据类后在网站上的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

部分是用来拆分源文件之间,而不是项目之间 – Jodrell 2012-04-19 10:21:22

回答

2

偏类定义只定义相同的类,如果局部类定义的命名空间是相同的,并且它们在没有定义合适的方法相同的组件。
这两个标准都不符合您的情况。

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

您可以通过多种方式实现此目的,其中一个非常简单的做法是在调用getUserID()时给logFunctions一个委托。另一种可能性是引入传递给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; }; 
+0

我想使用我的网站的属性值到我的数据类。实验我无法访问我的数据类中的这个属性。所以我想做它覆盖网站返回属性值 – Mehdi 2012-04-19 10:37:42

+0

@ Mehdi:这可以用我给你看的方法。 – 2012-04-19 11:21:26

0

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

虽然两者的logFunctionpartial他们在不同的项目,很可能命名空间(不指定)。所以,无论是仅由名称,而不是由编译器有关。