public interface classA
{
string User
{
get;
set;
}
}
public interface classB
{
string User
{
get;
set;
}
}
public interface facs : classA, classB
{
}
public class classC
{
public facs dd;
}
classC c = new classC();
c.dd.User = "dd";
错误:Error 2 Ambiguity between 'classA.User' and 'classB.User'
这类问题如何解决?问题原型在一个系统dll中
这个问题确实很麻烦。
在类的实现里,虽然我们可以通过显示实现来解决,但在使用的时候:
facs o;
o.User = null;
却产生的歧义,因为facs不知道这个User是来自classA还是classB,因此,只能是:
(o as classA).User 或者 (o as classB).User
来解决。
但这样操作很麻烦,可以通过另外一个方案:
假如facs是你自己写的类,那么,定义facs为:
public interface facs : classA, classB
{
new string User
{
get;
set;
}
假如是DLL中的类,可以对facs再次派生,然后在派生的接口中使用上述方案。
当然,在类的实现上是这样的:
public class impl : facs
{
string calssA.User
{
get
{
return (this as facs).User;
}
set
{
(this as facs).User = value;
}
}
string classB.User
{
get
{
return (this as facs).User;
}
set
{
(this as facs).User = value;
}
}
string facs.User
{
get;
set;
}
}
}
facs是dll的还是可以改写的?
可以改的话,可以先继承classA,覆盖下属性,在继承classB
在实现类里用显示实现接口应该可以解决吧
在实现类里这样写试试
string classA.User{get;set;}
string classB.User{get;set;}