C# 从抽象类字段继承的类被神秘地覆盖

C# 从抽象类字段继承的类被神秘地覆盖,c#,C#,我的问题是,一旦程序到达MyMethod()一次,它就会将LocalField和InheritedProperty设置为同一个指针,这意味着无论InheritedProperty何时更改,LocalField也会自动执行 class Inherited : AbstractClass { protected override void MyMethod() { LocalField = InheritedProperty; } public vo

我的问题是,一旦程序到达MyMethod()一次,它就会将LocalField和InheritedProperty设置为同一个指针,这意味着无论InheritedProperty何时更改,LocalField也会自动执行

class Inherited : AbstractClass
{
    protected override void MyMethod()
    {
        LocalField = InheritedProperty;
    }

    public void MyNewMethod()
    {
        //Is the new Array different?
        //Do something
    }

    public long[] LocalField;

    protected override long[] InheritedProperty => RetrtieveNewArray;
}

是否有人可以使my LocalField成为独立于InheritedProperty的新字段?

您可以克隆阵列:

LocalField = (long[]) InheritedProperty.Clone();
这将创建原始阵列的独立副本


在您的情况下,数组元素类型是值类型(
long
),这意味着克隆将复制所有数字。但是,如果对包含引用的数组执行相同操作,则只会得到“浅”副本,这意味着克隆数组中的引用将引用与原始数组中的引用相同的对象。这与您问题中的代码无关,但在一般情况下克隆阵列时,您应该注意这一点。

这些都是对同一事物的引用。因此,如果您更改了它,这些更改将反映在对它的所有引用中,您希望
LocalField
是什么?
InteritedProperty
的副本?即,使用相同的元素初始化,但不随继承属性的变化而变化?为此,您可以使用
Array.Copy
@maccettura抱歉,刚从我的浏览器复制过来。。。更新了我的评论当我们只有一些代码时,很难知道这里发生了什么。请提供一个答案,这样会更容易帮助你。(如果要创建单独的数组,则
LocalField=InheritedProperty.Clone();
可能是最简单的方法。)