访问修饰符的个人理解-private与protected

                            一:private
                           
private --只有在声明它的类或结构中访问.
例:
public class A
{
  private string name="xu";
  int age="23";  //默认为private
}
这时就不能在A的外部直接读取name和age的值,只有通过A类中的方法或属性完成。完整示例:
public class A
{
  private string name="xu";
  int age="23";  //默认为private
  public string GetName()  //这时的属性或方法就不能再声明为private 或protected了,这样会导致在外部同样不能访问。
  {
  return name;
  }
  public int Age
  {
  get { retunr age;}
  }
}
public class B
{
   public B()
   {
     A a1=new A();
     //string x=a1.name;  这样就不能访问A的name了
     string x=a1.GetName() ; //通过方法来访问。
     //int age=a1.age;    can not do this;
     int age=a1.Age; //通过属性来访问
   }
}
                                   二 protected
protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。
个人理解为:受保护成员只能在声明它的类中访问(如同private一样)或者通过它的派生类来访问。
如下例:
using System;
class A
{
    protected int x = 123;
    public int X{get return x;}
}

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;
        // a.X;----这样就可以读取
       
        // OK, because this class derives from A.
        b.x = 10;  
    }
}
分析:
一:当使用a.x=10时,由于A是基类,因此其下的private x不能外部访问,此时用a.x=10就会报错。
二:为什么用b.x=10就可以呢,这也是外部呀? ^_^:因此,此时,类B是类A的派生类,protected 修饰的如果在派生类中就可以访问。
总结:protected类型的,在外部而非派生类中访问时除非通过方法或属性,否则不可以访问。而在派生类中就可以访问。
      private类型的,除非通过方法或属性,否则不可以在外部访问。
     
     
      属于  默认的成员可访问性  该成员允许的声明的可访问性 
enum  public   无
 
class  private  < public protected internal private protected internal >
 
interface  public  无
 
struct  private  <public internal private >
 

原文地址:https://www.cnblogs.com/McJeremy/p/1200843.html