[英]Declare property getter in parent interface and setter in child interface in c#
[英]c# Set Parent class property in child setter
我试图在子属性设置器中设置父类属性。 我有一个主要类: User ,它具有子类LIST ArrayPositions ,而子类又具有ExpressionMember的子类列表。 每当在ExpressionMember类中设置属性ExpressionMemValue时,我也要更新其父类ArrayPosition。 但是,当前解决方案不会更新相应的父项。 这是代码:
public List<User> users = new List<User>();
public class User
{
public string ImageName { get; set; }
private string _PartName = "";
public string PartName
{
get
{
return this._PartName;
}
set {
_PartName=value;
}
}
public List <ArrayPosition> ArrayPositions { get; set; }
public override string ToString()
{
return this.PartName.ToString();
}
}
public class ArrayPosition:User
{
public string myArrayPos = "";
public string PartId { get; set; }
public string ArrayPos
{
get
{
return this.myArrayPos;
}
set
{
this.myArrayPos = value;
}
}
public List<ExpressionMember> ExpressionMembers { get; set; }
}
public class ExpressionMember : ArrayPosition
{
public string ExpressionMem { get; set; }
public string MyExpressionMemValye="";
public string ExpressionMemValue
{
get
{
return MyExpressionMemValye;
}
set
{
MyExpressionMemValye = value;
// this.ArrayPos = value; //set parent value, this will not update it
}
}
}
看起来您不需要使用继承,而是使用您已经在做的组合。 尝试这样做。 无论如何,这都不是完美的,但是我正在努力不改变您的总体策略。
public class User
{
public string ImageName { get; set; }
private string _PartName = "";
public string PartName
{
get
{
return this._PartName;
}
set {
_PartName=value;
}
}
public List <ArrayPosition> ArrayPositions { get; set; }
public override string ToString()
{
return this.PartName.ToString();
}
}
public class ArrayPosition
{
public string myArrayPos = "";
public string PartId { get; set; }
public string ArrayPos
{
get
{
return this.myArrayPos;
}
set
{
this.myArrayPos = value;
}
}
public List<ExpressionMember> ExpressionMembers { get; set; }
}
public class ExpressionMember
{
private ArrayPosition _parentArrayPosition;
public string ExpressionMem { get; set; }
public string MyExpressionMemValye="";
public string ExpressionMemValue
{
get
{
return MyExpressionMemValye;
}
set
{
MyExpressionMemValye = value;
this._parentArrayPosition.ArrayPos = value;
}
public ExpressionMember(ArrayPosition parent) {
_parentArrayPosition = parent;
}
}
}
您肯定没有正确使用继承和组合。 您正在寻找建立一棵对象树,其中对象本身具有子对象。 有些事情可能会澄清您的想法,而不是将它们称为子类/父类,在继承的情况下将它们称为子/父类,在组合的情况下将它们称为父/子对象。 父对象是一个类的实例,其中包含一个类的另一个实例(子对象)。 子类继承另一个类的成员。
您的继承权很奇怪。 我不清楚您的课程的确切职责。 除此之外,您可以通过将属性ExpressionMembers
为只读来保护它。 实现一个新方法来添加或删除元素。 将一个事件(例如ExpressionMemValueChanged
)添加到ExpressionMember
。 添加项目时触发此事件。 每当添加或删除元素时,都将ArrayPosition
注册/注销此事件。 然后,您可以在事件处理程序内部设置ArrayPos
值。
(您可以为您的ExpressionMembers
使用ObservableCollection
,并对CollectionChanged
事件做出反应,而不用编写getter / setter。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.