(五)C#基础加强系列之 “访问修饰符” 篇

首先,先简单的介绍一下C# 中的访问修饰符:

 public: 代表共有的,该类或成员可以在任何地方访问
 internal: 程序集共享,表示在当前程序集内可以访问。
 private:私有成员,在类的内部才可以访问。
 protected:保护成员,在该类的内部和继承类中可以访问。

下面就详细的说一下各个访问修饰符的区别:

先看下面的图:

 

这是建立了两个控制台项目,在 “01访问修饰符” 这个项目中添加引用 “02 JustFortest”,在 “02 JustFortest” 中添加了一个 Class1 的类,先将其定义为 public ,那么我们在 “01访问修饰符” 这个项目中就可以实例化 Class1类。

Class1 类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _02_JustFortest
{
    public class Class1//访问修饰符为 public
    {

    }
}

 

实例化结果:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _01访问修饰符
{
    class Program
    {
        static void Main(string[] args)
        {
            _02_JustFortest.Class1 cl = new _02_JustFortest.Class1();//可以实例化 02 JustFortest 中的Class1
        }
    }
}

public:代表共有的,该类或成员可以在任何地方访问

 

 那么,我们在把 Class1 这个类的修饰符改成 internal ,这也就意味着只有在 ”02 JustFortest“ 这个程序集中才会共享,再来看看  ”01访问修饰符“ 中实例化 “01访问修饰符” 的结果:

出现了红色波浪线,这也就意味着代码出错了。所以,当把类修饰成 internal 的时候,在其他程序集中就无法访问了,只有在本程序集中才会共享。

 

internal: 程序集共享,表示在当前程序集内可以访问。

 

 再来看看 private 和 protected:

 看代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _03_private_和_protected
{
    class Program
    {
        static void Main(string[] args)
        {
            Test2 te = new Test2();           
            Console.ReadKey();
             
        }
    }

    class Test1
    {
        private string str1 = "Mr";//在父类中定义一个字段 修饰符为 private
        protected string str2 = "Lucky";//在父类中定义一个字段 修饰符为 protected

    }

    class Test2 : Test1
    {     
        public Test2()
        {
            Console.WriteLine( base.str2 );//在子类中访问父类成员用 base 就可以了。           
        }

    }
}

得到的结果:

写完代码发现,在子类中,我们只能访问到父类中的 str2 这个字段,而 str1 这个字段在子类中是无法访问到的,所以说,在子类中,子类是可以访问到父类的 受保护成员。

再来看一下,我们实例化的一个 Test2 对象 te:

看图:

当我们用 te 想点出我们定义的 str1 和 str2 字段时,我们发现,是点不出来的。

所以,再强调一下,修饰成 private 后,外界是无法访问到的,而修饰成 protected 之后,只有自己和他的子类才能访问的到。

最后,再说一下,累的成员变量默认访问级别是 private 的,类的默认访问级别是 internal。

在 Test1 中 添加一个字段 str3 ,不添加任何访问修饰符:

反编译的结果:

在内部,自动为 str3 这个字段添加的 private ,而类则自动添加了 internal。

关于C#中常用的访问修饰符,就讲到这里。

posted @ 2012-10-26 20:46  乐文  阅读(538)  评论(0编辑  收藏  举报