C# 继承类中如果出现重复属性怎么办?

davidtsui 2011-12-31 10:08:58


public Class1
{
public int DuplicateProperty {get;set;}
}

public Class2 : Class1
{
public int DuplicateProperty{get;set;}
public int ItemId {get;set;}
}

public Application1
{
Class2 c = new Class2();
c.DuplicateProperty = 1; // 这个是 Class1 还是 Class2 的?
}

...全文
438 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你这个就相当于new

Class1 c1 = new Class2();
Class2 c2 = new Class2();

c1.DuplicateProperty c1里的值
c2.DuplicateProperty c2里的值

如果c1的DuplicateProperty 是定义为了虚拟的
c2的DuplicateProperty 是重写的
那么上面c1.DuplicateProperty 还是c2的值
  • 打赏
  • 举报
回复
那类东西 --> 那类不写new的东西
  • 打赏
  • 举报
回复
且不管你的代码中有多少明显不合语法、根本不可能通过编译器检查的地方,但是c#编译器也确实只是对那类东西给个警告(警告说应该对DuplicateProperty属性写new来声明一下),编译器仍然编译“通过”。它的警告其内涵也引不起足够重视。
  • 打赏
  • 举报
回复
悲剧!

“继承类中如果出现重复”,其实你何必要继承呢?对于使用DuplicateProperty者,它到底信谁呢?它是认为这是什么功能呢?你去使用别的名字有什么难的,为什么非要在子类中取一个与父类同名而不同意义的伪名字呢?

c#中支持这个玩意儿,纯粹是十年前为了学习c++使然。这个new是个非常糟糕的特性,明显是只顾代码不顾基本设计的,还不如干脆直接就不支持编译这类东西。
youzelin 2012-01-02
  • 打赏
  • 举报
回复
两个方案:
1. class1 的方法改成 virtual
2. class2 的方法用 new 关键字
后天左撇子 2011-12-31
  • 打赏
  • 举报
回复
class2继承了class1 不用在class2中在写public int DuplicateProperty{get;set;}
既然是继承 class2 中就已经有public int DuplicateProperty{get;set;}这条属性了
此时class2 已经可以调用 public int DuplicateProperty{get;set;}这条属性了
后天左撇子 2011-12-31
  • 打赏
  • 举报
回复
class2继承了class1 不用在class2中在写public int DuplicateProperty{get;set;}
既然是继承 class2 中就已经有public int DuplicateProperty{get;set;}这条属性了
davidtsui 2011-12-31
  • 打赏
  • 举报
回复
我知道了,原来Class2 里应该写 public new int DuplicateProperty {get; set;}
davidtsui 2011-12-31
  • 打赏
  • 举报
回复
c.DuplicateProperty 到底是 Class2 的,还是 Class1 的?
mizuho_2006 2011-12-31
  • 打赏
  • 举报
回复
Class1 a = new Class1(); 应该定义到上面。结果一样的。
mizuho_2006 2011-12-31
  • 打赏
  • 举报
回复

Class2 c = new Class2();
c.DuplicateProperty = 1;
Class1 a = new Class1();
MessageBox.Show(a.DuplicateProperty.ToString()); //值为0
MessageBox.Show(c.DuplicateProperty.ToString()); //值为1

110,580

社区成员

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

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

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