C# 类继承:从继承类的属性重新创建基类项(或实例) 我有一个从B继承来的a类。 A作为我想从B修改的一些只读属性 用new隐藏这些属性不是一个合适的选项,因为基类有一些使用自己属性的函数 无法使用override关键字,因为属性未标记为抽象、虚拟或override

C# 类继承:从继承类的属性重新创建基类项(或实例) 我有一个从B继承来的a类。 A作为我想从B修改的一些只读属性 用new隐藏这些属性不是一个合适的选项,因为基类有一些使用自己属性的函数 无法使用override关键字,因为属性未标记为抽象、虚拟或override,c#,class,inheritance,properties,overriding,C#,Class,Inheritance,Properties,Overriding,因此,我想知道是否可以从继承的类(B)完全重新创建对象的实际实例来访问这些只读属性 例如,为了更好地解释,对于继承元组的类,如果可能,我会这样做: public new T3 Item3 { get { return item3; } set { item3 = value; base = new Tuple<T1, T2, T3>(Item1, Item2, Item3

因此,我想知道是否可以从继承的类(B)完全重新创建对象的实际实例来访问这些只读属性

例如,为了更好地解释,对于继承元组的类,如果可能,我会这样做:

    public new T3 Item3
    {
        get { return item3; }
        set 
        {
            item3 = value;
            base = new Tuple<T1, T2, T3>(Item1, Item2, Item3); // Not valid
        }
    }
public static class TupleExtensions {
  public static Tuple<T1, T2, T3> 
    WhereItem3Is<T1, T2, T3>(this Tuple<T1, T2, T3> self, T3 newValue) {
    return Tuple.Create(self.Item1, self.Item2, newValue);
  }
  // other methods for Tuple<,,> or other Tuples...
}
var t = Tuple.Create(1, 2, 3);
// ...
t = t.WhereItem3Is(4);
公共新T3项目3
{
获取{returnitem3;}
设置
{
第3项=价值;
base=新元组(Item1、Item2、Item3);//无效
}
}

我看不出怎么做?

元组是不可变的,所以不能更改其值。当您拥有不可变对象时,更改它们的方法是返回一个新对象,并更改所需的属性。所以如果你想坚持使用元组,你可以这样做:

    public new T3 Item3
    {
        get { return item3; }
        set 
        {
            item3 = value;
            base = new Tuple<T1, T2, T3>(Item1, Item2, Item3); // Not valid
        }
    }
public static class TupleExtensions {
  public static Tuple<T1, T2, T3> 
    WhereItem3Is<T1, T2, T3>(this Tuple<T1, T2, T3> self, T3 newValue) {
    return Tuple.Create(self.Item1, self.Item2, newValue);
  }
  // other methods for Tuple<,,> or other Tuples...
}
var t = Tuple.Create(1, 2, 3);
// ...
t = t.WhereItem3Is(4);
但是写所有这些方法有点痛苦。因此,如果您需要很多,最好这样做:

var t = Tuple.Create(1, 2, 3);
t = Tuple.Create(t1.Item1, t1.Item2, 4);
您甚至可以使用包装器类型从代码中的不同位置引用元组,以便任何“更改”都可以看到:

var t = Tuple.Create(1, 2, 3);
var r = new Ref<Tuple<int, int, int>>(t);
// share r ...
r.Value = Tuple.Create(r.Value.Item1, r.Value.Item2, 4);

...

public class Ref<T> {
  public T Value { get; set; }
  public Ref(T value) { Value = value; } 
}
var t=Tuple.Create(1,2,3);
var r=新的参考值(t);
//共享资源。。。
r、 Value=Tuple.Create(r.Value.Item1,r.Value.Item2,4);
...
公共类参考{
公共T值{get;set;}
公共引用(T值){value=value;}
}

然而,这一切让人感到非常尴尬。也许你可以更好地解释你面临的基本问题,以便提供更好的答案。也许你根本不需要一个元组,只需要一个特定于你的领域的东西。

你发布的越多,你越不需要一个
元组,你越想要一个真正的类来为你的领域建模。也许我误解了元组是什么,但我只想要一个具有元组相同行为的类,除了我希望属性是可更改的。我之所以发布这个新问题,是因为我认为它是一个更简单的解决方案,而不是实现我所说的接口。我认为如果你能创建一个简短的问题来描述你试图建模的问题,而不是一些关于做一些非常具体的事情的机械问题,你会得到一个更好的答案(而且看起来很尴尬)所以我想我想做的(问题标题中写的)是不可能的