刚接触接口,重写接口成员时为什么可以引用私有成员?

BlueskyGreenearth 2005-03-20 01:29:19
例如
class UseInerface:IComparable
{
private int num;
public UseInerface(int num)
{
this.num=num;
}
public int CompareTo(Object obj) //重写CompareTo函数
{
UseInerface otherObject=obj as UseInerface;
if(otherObject==null)
throw new ArgumentException("error");
if(num<otherObject.num) //使用私有成员num
return -1;
else if(num>otherObject.num)
return 1;
else
return 0;
}
}
class Test
{
public static int Main()
{
UseInerface class1=new UseInerface(1);
UseInerface class2=new UseInerface(2);
Console.WriteLine(class1.CompareTo(2));

return(0);
}
}
...全文
88 点赞 收藏 11
写回复
11 条回复
ccat 2005年03月21日
哈哈,要不是速马那句话,我也差点儿被骗了。这个和接口无关,因为你在UseInterface类的上下文内,所以可以访问同样为UserInterface 类型的对象的私有成员。这种能力对实现Equals方法或运算符重载、复制构造等功能非常重要
回复 点赞
zdy_8212 2005年03月21日
IComparable接口的扩展,自然在经承类可以使用经承类自己的数据了。兄弟级别不可访问,除非是友元。
回复 点赞
dk9761 2005年03月21日
private 是相对于类的外部的啊 ~ 你的 private int num 是在内部 所以无所谓 private不private
回复 点赞
BlueskyGreenearth 2005年03月20日
我刚才试图在CompareTo方法里访问另一个类的私有成员结果失败。看来不论如何通过属性来访问是最合适的,免得出问题
回复 点赞
fansihong 2005年03月20日
接口的其实也就是拓展 单继承的限制
回复 点赞
fansihong 2005年03月20日
楼主.你只要记得一句话:接口定义,类中实现,抽象隐含(virtual),类中覆盖(override)
回复 点赞
BlueskyGreenearth 2005年03月20日
回2楼的,我没有使用override也能编译通过
回复 点赞
速马 2005年03月20日
这里和接口无关!有两个人似乎搞错了
回复 点赞
速马 2005年03月20日
因为你还在class UseInerface上下文里面
回复 点赞
surstar 2005年03月20日
当然可以了,不能访问的话,那接口怎么来实现呢
回复 点赞
v192 2005年03月20日
为什么不能访问呢?
接口只是对一个类应该有些什么方法做出规范,而具体实现是由该类自己实现的,所以和他直接写一个这样的方法也没什么不同的,自然可调用它的私有成员。
另外你写得是不是应该为public override int CompareTo(Object obj)才能编译通过?
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告