我试图在子属性设置器中设置父类属性。 我有一个主要类:用户,它有一个子类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
}
}
}
答案 0 :(得分:1)
看起来您不需要使用继承,而是使用您已经在做的组合。尝试这样做。它无论如何都不完美,但我试图不要过多地改变你的总体策略。
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;
}
}
}
您肯定没有正确使用继承和组合。您正在构建一个对象树,其中对象本身具有子对象。可能在你脑海中澄清事物的东西不是将它们称为子/父类,而是在继承的情况下将它们称为子/超类,在组合的情况下将它们称为父/子对象。父对象是包含类(子对象)的另一个实例的类的实例。子类继承另一个类的成员。
答案 1 :(得分:0)
你的继承很奇怪。你的课程的确切责任对我来说并不清楚。
除此之外,您可以通过将属性设置为只读来保护属性ExpressionMembers
。实现添加或删除元素的新方法。将事件(例如ExpressionMemValueChanged
)添加到ExpressionMember
。添加项目时会触发此事件。无论何时添加或删除元素,您都可以向此事件注册/注销ArrayPosition
。在事件处理程序中,您可以设置ArrayPos
值。
(您可以为ObservableCollection
使用ExpressionMembers
并对CollectionChanged
事件作出反应,而不是写一个getter / setter。)