首页 新闻 会员 周边 捐助

关系继承的属性重名问题

0
[已解决问题] 解决于 2012-04-10 15:26

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中

onest的主页 onest | 菜鸟二级 | 园豆:228
提问于:2011-01-27 16:24
< >
分享
最佳答案
1

这个问题确实很麻烦。

在类的实现里,虽然我们可以通过显示实现来解决,但在使用的时候:

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;

}

}

}

奖励园豆:5
无之无 | 大侠五级 |园豆:5095 | 2011-11-11 09:09
其他回答(2)
0

facs是dll的还是可以改写的?

可以改的话,可以先继承classA,覆盖下属性,在继承classB

六芒星 | 园豆:627 (小虾三级) | 2011-01-27 17:47
0

在实现类里用显示实现接口应该可以解决吧

在实现类里这样写试试

string classA.User{get;set;}

string classB.User{get;set;}

农民工老李 | 园豆:423 (菜鸟二级) | 2011-01-28 16:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册