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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迷你卡卡 中级黑马   /  2013-10-23 19:16  /  3617 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 迷你卡卡 于 2013-10-24 15:05 编辑

在C#中,定义类的时候,我一般都是定义为public,那么类的访问修饰符可以使用internal,protected,private这几种吗?

评分

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

查看全部评分

12 个回复

倒序浏览
引用:这个得看你是什么类,外部类只能是public 和internal,内部类的话就随便了,其他的类型应该也是这样。。。。
条件限制没有亲自测试,源自百度!

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
可以的
public:该类任何地方都可以访问到该类
internal:该类在该项目中可以被访问到,如果一个解决方案下只有一个项目,那么internal和public没怎么区别
protected:该类只能被他的子类访问
private:该类不能被任何类访问包括他的子类

评分

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

查看全部评分

回复 使用道具 举报
分别是:
        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

查看全部评分

回复 使用道具 举报
C#中类及类型成员修饰符有以下四类:public,private,protected,internal。

public        类及类型成员的修饰符

private   类型成员的修饰符

protected   类型成员的修饰符

internal    类及类型成员的修饰符

由以上四类说明,我们知道,可以放在class前面修饰类的修饰符关键字只有public和internal,如果没写任何关键字,默认是internal.

         1.public class:任何地方该类都可以被访问到。

         2.internal class:只有在同一程序集内,该类才可以被访问到。

而类型成员的修饰符可以是由这四个关键字形成的五种组合,他们分别是:public,protected,private,internal,protected internal.类型成员前如果没写任何关键字,默认为private。他们具体的访问权限,我们看下图就明白了。



需要注明的是:

protected的权限和private的权限很相似,唯一不同的是protected类型成员可以被子类继承,而private类型成员不可以被继承。
protected    internal类型成员可以被理解成protected   or   internal    类型成员。不存在protected   and   internal类型成员。

评分

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

查看全部评分

回复 使用道具 举报
public
同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
private
只有同一类或结构中的代码可以访问该类型或成员。
protected
只有同一类或结构或者此类的派生类中的代码才可以访问的类型或成员。
internal
同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。
protected internal
由其声明的程序集或另一个程序集派生的类中任何代码都可访问的类型或成员。 从另一个程序集进行访问必须在类声明中发生,该类声明派生自其中声明受保护的内部元素的类,并且必须通过派生的类类型的实例发生。
回复 使用道具 举报
杨靖 中级黑马 2013-10-23 21:25:54
7#
可以哦。
public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。
internal:访问仅限于当前程序集。
protected internal:访问仅限于当前程序集或从包含类派生的类型。
private:访问仅限于包含类型。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
只有需要公开的变量才需要定义为属性,所以属性一般为public或protected。如果不需要公开,也就不需要定义为属性了,使用类中的私有变量就可以了(私有变量修饰符为private)

评分

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

查看全部评分

回复 使用道具 举报
public 就是公共的,没有访问限制
internal 是只能在当前项目中使用(可以这么理解)。如果你定义类的时候没有加任何的访问修饰符,那么系统默认的就是internal

评分

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

查看全部评分

回复 使用道具 举报
V_John 中级黑马 2013-10-24 13:10:36
10#
1:public        //        由此修饰的成员,可以再任何地方呗调用        (公共的)
2:private        //        由此修饰的成员,只可以在本类中调用
3:internal        //由此修饰的成员只能在本项目中呗访问到,现阶段我接触的是单项目,起作用等于public                (内部的)
4:protected        //由此修饰的成员只能在本类中和子类中呗访问到
他还有等级顺序。从大到小是。。。
等级排序:
public
        internal        && protected//这两个没有等级区分;
private
回复 使用道具 举报
private           私有的  //只能在当前类内部访问
protected        受保护的  //只能在类内部以及所有子类内部访问
internal        只能在当前程序集内部访问
protected internal 在类内部以及所有子类内部可以访问,也可在当前程序集内访问
public                公共的  //在任何地方都可以访问

评分

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

查看全部评分

回复 使用道具 举报
多谢各位的耐心解答
回复 使用道具 举报

同学给你加分了!好好学习!蔡蔡和叶叶在黑马等着你!黑马有你更精彩!快点为了当土豪努力吧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马