将 属性 隐藏在基数 class 中会导致重大更改吗?

Will hiding a property in a base class cause a breaking change?

我有一个基础 class 'A'(一个集合),其中包含一个 ArrayList 和一个索引 属性,returns ArrayList 中的那个索引。我还有一个派生的 class 'B' 和泛型类型 T,作为 T 的集合。最后,有 classes 'C' - 'F'派生出 class B,每个 B 都有不同的 T。

代码如下所示:

public class A 
{
    protected ArrayList list;
    public object this[int index] { get { return list[index]; } }
}


public class B<T> : A
{

}

public class C : B<G>
{

}

有第 3 方 .dll 使用这些 classes,所以我想知道我是否可以在不破坏这些程序集的情况下进行更改。我想在 B 中添加一个索引 属性,这将隐藏 A 中的索引 属性。

public class B<T> : A
{
    // Adding this property
    public new <T> this[int index] { get { return (T)list[index]; } }
}

现在其他 .dll 的代码可能如下所示:

C c = new C();
G g = (c[0] as G);

之前使用 'as' 进行转换的代码仍将使用新索引 属性 进行编译,但它也允许将代码简化为:

C c = new C();
G g = c[0];

我想知道将索引 属性 添加到 B 是否会破坏使用我的程序集的第 3 方 .dll。

我也非常感谢解释为什么或为什么不是重大更改。

我找到了问题的答案。这会在某种情况下造成二进制级别的中断。

如果我在派生 class 中创建一个 属性,它隐藏了基础 class 中的 属性,使用此更改编译的第 3 方 .dll 将不会旧版本的 .dll 的功能更长。新的 .dll 将在派生的 class 中引用 属性 进行编译,并尝试使用该 属性,这在我的旧版本的 .dll 中不存在。