gpt4 book ai didi

c# - 此类继承语义的名称

转载 作者:太空狗 更新时间:2023-10-30 01:10:26 27 4
gpt4 key购买 nike

public class _base 
{
protected int x = 5;
protected int GetX(_base b) { return b.x; }
}


public class _derived : _base
{
public int Foo()
{
var b = new _base();
//return b.x; // <-- this would be illegal
return GetX(b); // <-- This works and does exactly the same as the line above
}
}

(请不要更改代码。它正在运行并显示问题。)

错误是

Cannot access protected member '_base.x' via a qualifier of type '_base'; the qualifier must be of type '_derived' (or derived from it)

请注意,因为 b 是 _base 类型并且我们不在 base 中,所以我们无法访问它的 protected 成员。我想原因是因为 _base 可能是其他派生类型,因此它不保护代码,但这不是重点。我正在做的是使用额外的 protected 方法来解决上述问题。这给了我我想要的行为和我想要的保护。我希望有一个关键字允许这种访问,但没有。我感兴趣的是这个“模式”是否有名字。

(我使用的是 protected ,因为内部允许同一程序集中的任何人访问)

最佳答案

通常这种访问是不允许的,因为访问修饰符作用于类(作为元访问属性)。在派生类中,基类的实例与派生类没有类关系。在这里,我们混合了实例和类。 protected 关键字只提供对派生类的访问,但可以从任何实例(即使在派生类中)访问。

这显然是语言的缺陷,但由于 99.9% 的时间都没有使用它,因此不需要它。在任何情况下,C# 中都没有关键字可以提供您想要的内容。

关于c# - 此类继承语义的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4731806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com