详细的访问说明符

本文关键字:说明符 访问 | 更新日期: 2023-09-27 18:13:22

using System;
namespace Protected_Specifier
{
  class access
   {
 // String Variable declared as protected
 protected string name;
 protected internal string FirstName;
 public void print()
  {
    Console.WriteLine("'nMy name is " + name);
  }
  public void print1()
  {
    Console.WriteLine("'nMy Firstname is " + FirstName);
  }
   }
 class Program : access // Inherit access class
   {
 static void Main(string[] args)
  {
    //Program p=new Program();
    access a=new access();
    Console.Write("Enter your name:'t");
    a.name = Console.ReadLine(); //error
    a.FirstName = Console.ReadLine();//no error
    a.print();
    a.print1();
    Console.ReadLine();
  }
   }
 }
关于继承,我有一个疑问。在这个例子中,如果我们使用基类的实例,它不会为protected工作,而是为protected Internal工作。请告诉我原因.....

详细的访问说明符

如果你的问题是你不能通过基类实例访问基类中的name字段,是的,这就是protected修饰符的工作方式。

需要一个派生类型的实例来访问受保护的成员。

取自msdn

的例子

基类的受保护成员可以在派生类中访问仅当通过派生类类型进行访问时。例如,考虑以下代码段:

class A
{
    protected int x = 123;
}
class B : A
{
    static void Main()
    {
        A a = new A();
        B b = new B();
        // Error CS1540, because x can only be accessed by 
        // classes derived from A. 
        // a.x = 10;  
        // OK, because this class derives from A.
        b.x = 10;
    }
}
语句a.x = 10产生错误,因为它是在静态方法Main中生成的,而不是在类b的实例中生成的。