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

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);
}
}
...全文
156 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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)才能编译通过?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧