C# 客观性与继承性
通常,C# 客观性与继承性,c#,C#,通常,protected告诉我们继承类可以访问该元素 在这种情况下,为什么该方法在Y类对象中不可见 它仅在public class Program { class X { // protected / public protected void GetX() { Console.WriteLine("X"); } } class Y : X { }
protected
告诉我们继承类可以访问该元素
在这种情况下,为什么该方法在Y
类对象中不可见
它仅在public
class Program
{
class X
{
// protected / public
protected void GetX()
{
Console.WriteLine("X");
}
}
class Y : X
{
}
static void Main(string[] args)
{
var y = new Y();
y.GetX(); // Not work
Console.ReadKey();
}
}
protected
仅表示“对所有派生类可见”。嵌套在另一个类中的类不会向包含它的类提供其受保护的成员。从继承的角度来看,嵌套类对任何成员的可访问性都没有任何影响
话虽如此,您的程序
-类与您的Y
-类完全无关,因此只能访问其公共成员Y
当然可以从X
访问受保护的meber
编辑:您可以使用internal
来指示您的成员应该对同一程序集中的所有类型可见(因此对程序也可见),而不管它们与X
的继承关系如何。您只能访问派生类中的方法。您正在尝试的是创建类(Y)的实例并访问受保护的方法。那是不可能的。这里有一个例子
class Program
{
class X
{
// protected / public
internal void GetX()
{
Console.WriteLine("X");
}
protected void GetZ()
{
Console.WriteLine("Z");
}
}
class Y : X
{
public void GetXZ()
{
GetX();// within class, I can access Internal method from base class.
GetZ();// within class, I can access Protected method from base class.
}
}
static void Main(string[] args)
{
var y = new Y();
y.GetX(); // Works
y.GetZ(); //Does Not Work (Protected method, can't be accessed outside of a derived class)
y.GetXZ();// Works
Console.ReadKey();
}
}
因为只有Y
继承X
<代码>程序
没有。您应该再次阅读文档中的关键字。GetX
在Y
中可见,但是您从外部调用它如果我想从继承对象中的父对象调用方法,我是否总是必须将其设置为public
?@ImpoUserC:如果您想从类外部(从“使用代码”)调用方法,那么是,这种方法必须是公开的。如果您想从类内部调用该方法,那么它就不会。如果我正确理解您的意图,您也可以将该方法设置为internal
,以便可以从同一项目中的其他代码在类外部调用它,但无法从项目外部访问它。