A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ┾——黑马 于 2013-9-26 18:57 编辑

C#中的五种访问修饰符,publlic,protected,private,internal,protected internal的区别和联系?

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

7 个回复

倒序浏览
C#中的五种访问修饰符,publlic,protected,private,internal,protected internal

public 公有访问。不受任何限制。

private 私有访问。只限于本类成员访问,子类,实例都不能访问。

protected 保护访问。只限于本类和子类访问,实例不能访问。

internal 内部访问。只限于本项目内访问,其他不能访问。

protected internal 内部保护访问。只限于本项目或是子类访问,其他不能访问
希望能够帮到你!

  

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
修饰符有五种:private(私有的)、protected(受保护的)、internal(程序集内部的)、public(公开的)、以及protectde internal(只有本程序内或者继承于该类的类型可以访问)。
可以使用修饰符的对象:命名空间、类、结构、枚举、接口、委托、函数、变量。
Private:  类自身调用。
Protected: 以包含Protected 的类开始,延伸到所有派生类,均可访问。
Public:不用多说, 所有的类均可访问。
Internal: 同一个程序集中的所有类均可访问,可以想象成Public 的其中一个程序集集合。
Protected Internal : Internal 和 Protected的并集, 同一个程序集中的所有类,以及所有程序集中的子类。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
public 公有访问。不受任何限制。
private 私有访问。只限于本类成员访问,子类,实例都不能访问。
protected 保护访问。只限于本类和子类访问,实例不能访问。
internal 内部访问。只限于本项目内访问,其他不能访问。
protected internal 内部保护访问。只限于本项目或是子类访问,其他不能访问
如果有不明白的继续探讨

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
本帖最后由 段朝骞 于 2013-9-26 12:04 编辑

C#中有4个访问修饰符(5个访问修饰级别):

public:访问不受限制。


protected:访问仅限于包含类或从包含类派生的类型。


Internal:访问仅限于当前程序集。


protected internal:访问仅限于当前程序集或从包含类派生的类型。(就是protected和internal集合的并集)


private:访问仅限于包含类型。



在类这个级别(命名空间内)不写访问修饰符,默认为Internal。



在类成员中(类方法外)不写访问修饰符,默认的访问修饰符为private


评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
本帖最后由 念念念念_、 于 2013-9-26 12:12 编辑

对于楼主的这个问题,前段时间我正好整理好了笔记,现在分享下:

分别是:
        private           私有的  (只能在当前类内部访问)
        protected        受保护的(只能在类内部以及所有子类内部访问)
        internal        只能在当前程序集内部访问
        protected internal 在类内部以及所有子类内部可以访问,也可在当前程序集内访问
        public                公共的  (在任何地方都可以访问)


        protected与internal没有可比性。protected是在当前类内部写,所有子类都可以访问。而internal是在同一个程序集中可以访问。

        假如不再同一个程序集中,但是依然存在继承关系,那么protected访问修饰符类型依然可以访问

---------------------------------------------------------------------------------------
        
        子类继承父类的时候,子类的修饰符不能比父类高。

        例如:

//可访问性不一致
class Person   //默认是internal修饰符
{
        public string Name
        {
                get;
                set;
        }
}

public class student:Person  // 所以这里不能继承,会报错
{
               
}

public class Person
     {
         public string Name
         {
             get;
             set;
         }
     }

     public class Myclass
     {
         //要求方法参数的访问性级别与方法本身的访问级别一致
         public void Do(Person p)
         {
             Console.WriteLine(p.Name);
             Console.ReadKey();
         }
     }


可访问性不一致,方法的参数和返回值的类型必须与方法本身的访问修饰符一致

--------------------------------------------------------------------------


#region 可访问性不一致,属性的访问级别与属性的类型的访问级别
     class class1
     {

     }

     public class Person1
     {
         public class1 c
         {
             get;
             set;
         }
     }
     #endregion

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报

public 公有访问;可以在任何地方被访问。
private 私有访问;只能在本类中被访问。
internal 内部访问;只能在本项目中被访问。
protected 保护访问。只能在本类和子类中被访问。
protected internal 内部保护访问。能够在本类和所有子类中被访问。

值得注意的是:
在类这个级别,不写访问修饰符,默认为internal。
在一个类中定义属性或者方法的时候,没有写访问修饰符,则默认为private
而且在方法中不能写无法写访问修饰符。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
private  私有访问修饰符,只能在类内部访问该修饰符修饰的类成员(类不能被标记为私有的)

  internal 内部访问修饰符,只能在程序级内部访问该修饰符修饰的类(新建类如果不加修饰符默认为internal修饰符修饰)

  protected 保护访问修饰符,只能在本类或者继承自本类的子类中才能被访问

  protected internal 保护+内部 访问修饰符,在程序集内部或者继承自本类的子类中才能被访问

  public  共有访问修饰符,在程序的任何地方都能访问

  使用反射等方法可以访问私有 内部 保护等修饰符修饰的类或成员属性

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马