我有以下课程演示:
public class Item
{
public string Id {get;set;}
public string Name {get;set;}
}
public class DetailedItem : Item
{
public Item item {get;set;}
public override string Id{
get{return this.item.Id}
}
}
就像我在Id属性中显示的那样,我想在从DetailedItem访问属性时返回内部项属性。
是否有通用的方法可以在不覆盖每个属性的情况下执行此操作?
谢谢!
答案 0 :(得分:4)
你为什么要这样工作?
DetailedItem
是Item
,如继承关系中所述,为什么保持 Item
然后呢?覆盖其他属性?
您可以创建一个继承自 Item 并添加新属性的DetailedItem
类。
答案 1 :(得分:1)
不,没有这样的方式。您必须授予对整个项目的访问权限,或者通过新属性公开它的内部属性。但似乎这种设计有问题。这种气味被称为"对象嫉妒"。
答案 2 :(得分:1)
public class Item
{
public string ID {get;set;}
public string Name {get;set;}
}
好到目前为止......
public class DetailedItem //as an adapter or proxy object
{
private Item item;
public string ID { get { return item.ID; }}
public string Name { get { return item.Name;}}
public DetailedItem(Item item) { this.item = item; } //constructor
}
答案 3 :(得分:0)
看起来你有一个继承的类,就像其他人所说的那样。所以你的DetailedItem
"是"而不是"有一个(n)" Item
。
所以你甚至不需要在派生类中重复基类的属性。你可以这样做:
public class Item
{
public string Id {get;set;}
public string Name {get;set;}
}
public class DetailedItem : Item
{
public String Details { get; set; } // just an example other property
}
然后你可以直接调用DetailedItem.Id
,因为它已经在基类中定义了。
答案 4 :(得分:0)
Roy Dictus是正确的。但是,如果您遇到无法修改结构并希望完全隐藏基本实现的任何情况,请使用new
关键字
public class Item
{
public string Id { get; set; }
public string Name { get; set; }
}
public class DetailedItem : Item
{
public new string Id
{
get { return "newid"; }
}
}
请记住,这应该是一种罕见的情况,并不常见。