标题:焦头烂额:类的访问级别和成员的访问级别,求助,急!!
只看楼主
lxsxd
Rank: 5Rank: 5
等 级:贵宾
威 望:14
帖 子:153
专家分:357
注 册:2014-4-15
结帖率:96.15%
已结贴  问题点数:20 回复次数:4 
焦头烂额:类的访问级别和成员的访问级别,求助,急!!
一、问题:关于类的访问级别和成员的访问级别
    学习访问级别这个章节时,感觉就是访问修饰符,没有引起重视。学完章节后,开始做练习才发现,关于这两级的访问级别,我自己是一塌糊涂,用了整整一个下午近3个小时,还是没有解决。真可谓是:焦头烂额。
二、在此:焦急求助,希望高手大侠不吝赐教,帮忙解决这个问题。
    我把自己的困惑集中于下面这个表格中,请高手大侠拨冗解答。小虾在此先谢谢了!
-------------------------------------------------------------------------------------------------------
类的访问级别  |    成员的访问级别    | 类可以提供什么类访问? |  类中的成员可以提供什么类及对象的访问?|
--------------|----------------------|------------------------|----------------------------------------|
 public       |    public            |                        |                                        |
              |----------------------|------------------------|----------------------------------------|
              |   internal           |                        |                                        |
              |----------------------|------------------------|----------------------------------------|
              |   private            |                        |                                        |
              |----------------------|------------------------|----------------------------------------|
              |  protected           |                        |                                        |
--------------|----------------------|------------------------|----------------------------------------|
 internal     |   public             |                        |                                        |
              |----------------------|------------------------|----------------------------------------|   
              |  internal            |                        |                                        |
              |----------------------|------------------------|----------------------------------------|   
              |  private             |                        |                                        |
              |----------------------|------------------------|----------------------------------------|   
              |  protected           |                        |                                        |
--------------|----------------------|------------------------|----------------------------------------|   
 private      |  public              |                        |                                        |
              |----------------------|------------------------|----------------------------------------|
              |  internal            |                        |                                        |
              |----------------------|------------------------|----------------------------------------|   
              |  private             |                        |                                        |
              |----------------------|------------------------|----------------------------------------|
              |  protected           |                        |                                        |
--------------|----------------------|------------------------|----------------------------------------|
 protected    |  public              |                        |                                        |
              |----------------------|------------------------|----------------------------------------|   
              |  internal            |                        |                                        |
              |----------------------|------------------------|----------------------------------------|        
              |  private             |                        |                                        |
              |----------------------|------------------------|----------------------------------------|   
              |  protected           |                        |                                        |
--------------|----------------------|------------------------|----------------------------------------|

急!搞不明白,很急!百度了,翻书了,得到的只是零碎的,希望大侠不吝赐教。我都头晕脑胀了!!

[ 本帖最后由 lxsxd 于 2014-8-17 21:24 编辑 ]
2014-08-17 21:20
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
你想复杂了,类的对象访问只能访问类成员中的public和internal的变量,起到的就是保护作用,但是对于类内部的成员函数,它可以使用类中的任何成员,比如:
       internal class A2:A1                   //A1类型不影响
            {
                private int a21;
                public int b21;
                internal  int c21;
                protected int d21;
                public void GetWorld(A2 m)
                {
                    Console.WriteLine("成员:" + m);            //m就可以访问本类中的任何成员以及A1中出private类型外的成员,继承不了private,所以不能访问
                }                                               //本质上还是类中的成员可以访问类中的任何成员变量
                public void GetWorld(A1 m)
                {
                    Console.WriteLine("成员:" + m);                //m就可以访问A1类中的public、internal成员,即使继承了A1,也只能访问public和internal类型
                }
            }

只要类对象的使用在类声明的外部,那么对象只能访问类中的public和internal成员,其它的一概不能访问。private只能类自己访问,protected类和子类能访问,public谁都可以访问

Maybe
2014-08-17 22:40
lxsxd
Rank: 5Rank: 5
等 级:贵宾
威 望:14
帖 子:153
专家分:357
注 册:2014-4-15
得分:0 
感谢信
---------
感谢  邓士林  !!你的帮助让我对访问级别的理解大大进了一步!!在此,小虾谢谢您!结贴分全部给您!

艰难地走在C#自学的路上…………
2014-08-18 15:56
lxsxd
Rank: 5Rank: 5
等 级:贵宾
威 望:14
帖 子:153
专家分:357
注 册:2014-4-15
得分:0 
我的理解:写在这段代码中。
namespace Main方法
{
    public class A
    {
        public int X;
        internal int Y;
        protected int Z;
        private int H;
        public void Ahello()
        {
            A hel = new A();
            hel.X = 1;
            hel.Y = 2;
            hel.Z = 3;
            hel.H = 4;  //访问自己类内的成员,不管什么访问修饰符,均可访问;

        }
    }
    internal class B
    {
        public int X;
        internal int Y;
        protected int Z;
        private int H;
    }

    class C : A  //继承类A
    {
        public int M;
        internal int N;
        protected int L;
        public void Chello()
        {
            C hel = new C();
            hel.M = 1;
            hel.N = 2;
            hel.L = 3;  //访问自己类的任何成员;不管什么访问修饰符;
            hel.X = 4;
            hel.Y = 5;
            hel.Z = 6;  //因为继承A类,所以可以访问A类中的public\internal\protected;但不能访问A类中的private;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            A pic = new A();
            pic.X = 1;
            pic.Y = 1;  //其他类中只能访问public类中的public、internal修饰的成员;但不能访问A类中的private和protected;

            B nal = new B();
            nal.X = 1;
            nal.Y = 1; //其他类中只能访问internal类中的public、internal修饰的成员;但不能访问B类中的private和protected;

            C pro = new C();
            pro.X = 1;
            pro.Y = 2;
            pro.M = 3;
            pro.N = 4;  //其他类中只能访问internal\public类中的public、internal修饰的成员;但不能访问A、C类中的private和protected;

            Console.ReadKey ();
           
        }
    }
}

艰难地走在C#自学的路上…………
2014-08-18 15:57
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
回复 4 楼 lxsxd
基本上就是这样

Maybe
2014-08-18 22:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-435088-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015438 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved