各位论坛上朋友,下面的代码是网上的例子,是演示代码嵌套的。代码如下:问题写在代码的旁边了,希望各位朋友能发表一下,一解自己心中的疑团。另外,其实代码的嵌套、包含,共享和继承,在实际的编程中是为了减少代码量,提高可读性,请问有没有相关例子,可以提供学习一下,以加深自己的理解,谢谢!!!
public partial class _Default : System.Web.UI.Page
{
    public class aaa   
    {
        private string val1;  
        public aaa(string str)   
       {val1 = str; }
        public string Val1    
        {
            get
            { return val1; }
            set
            { val1 = value; }
        }
    }
    public class bbb   
    {
        private aaa bval1;
//问题1:这里定义了一个私有变量,那么这个“bval1”是不是既是aaa类的私有变量,也同时是bbb类的私有变量呢?正常来说,用了private定义的变量,是只限此类使用 ,但这个私有变量是属于aaa类的,但却在bbb类进行定义,它究竟可以被谁调用?这样定义有什么作用,目的是什么?
        public bbb()     
        {
               
        }
        public aaa Bval1
//问题2:这个“Bval1”的属性是不是只属于aaa类的?另外,将aaa类的公共属性放在bbb类里面定义,这样又有什么好处,目的是什么?
        {
            get
            { return bval1; }
            set
            { bval1 = value; }
        }
    }
       
    protected void Page_Load(object sender, EventArgs e)
    {
        bbb bb = new bbb(); 
        bb.Bval1 = new aaa("dsdsdcs"); 
//问题3:这个属性为什么要这样进行赋值?这句该怎样理解?
        Response.Write(bb.Bval1.Val1); 
//问题4:这句又是什么意思,该怎样理解。自己用F11跟踪过,程序会先跳到Bval1这个属性,执行return bval1;然后再跳到Val1这个属性,执行return val1;的。}
  
}

解决方案 »

  1.   

    这个是类嵌套???private aaa bval1;
    这句话只是在bbb中声明了一个类型为aaa的局部变量bval1public aaa Bval1
    这句话只是在bbb中声明了一个类型为aaa的属性bval1楼主好好看看基础的语法吧~~~~
      

  2.   

    楼上说的很清楚了.其实刚开始学习语言都很痛苦,不过别害怕也别担心,找一本像样点的书,看以看.不明白的先跳过去.过短时间再回来看.还有就是千万别买什么"XX系统开发详解""XX数据库开发实例",当你把基础技术都掌握后,会发现这些书都是垃圾,而当你没掌握这些基础技术的时候这些书就是天书.这些垃圾数是那些垃圾教授评职称用的.
    如果想学C#,可以看看C#高级编程第四版,如果口袋比较空,看看中国人写的一本"c#2.0程序设计"(清华大学出版社,黄皮的.好像是郑宇泽写的),也还可以
      

  3.   

    那无非就是对象定义(和声明变量是一样的)
    public aaa Bval1
            {
                get
                { return bval1; }
                set
                { bval1 = value; }
            }
    这是一个公有属性.是C#提倡是一种书写方式:即,定义的变量都是私有的,然后提供一个公有的属性.有点类似java中bean类
      

  4.   

    天。。你搞错了
    这个就是普通的类回答下列问题:
    问题1:这里定义了一个私有变量,那么这个“bval1”是不是既是aaa类的私有变量,也同时是bbb类的私有变量呢?这个只是bbb类的私有变量,和aaa类无关,只是aaa的类型而已问题2:这个“Bval1”的属性是不是只属于aaa类的?另外,将aaa类的公共属性放在bbb类里面定义,这样又有什么好处,目的是什么?
    这个property 不属于aaa类,只属于bbb类,因为你在上面定义了private aaa bval1;
    所以为了让外部能访问,公开一个property问题3:这个属性为什么要这样进行赋值?这句该怎样理解?
    当然这么赋值拉,因为要个aaa类的对象呀。bval1是aaa类的对象!!!问题4:这句又是什么意思,该怎样理解。自己用F11跟踪过,程序会先跳到Bval1这个属性,执行return bval1;然后再跳到Val1这个属性,执行return val1;的。
    因为bval1是aaa类的对象,所以它有val1的私有成员变量。
      

  5.   

    首先感谢楼上各位朋友的热心回复,同时也很感谢“wangchao1982(飘零一剑) ”指了一条光明的大路,其实自己不是没有学基础知识,一直都是在学,只是领悟能力比较差。“superxiaomm(小美)”,很感谢你的详细回复,但自己还有一些疑问,希望能再赐教,谢谢!问题1:这个只是bbb类的私有变量,和aaa类无关,只是aaa的类型而已,那它将这个变量的类型定义为aaa类有什么作用呢?它的最终目的是什么呢?如果这样定义:private string bval1就很理解,是定义一个字符串变量。将类型定义为aaa类就确实不是很好理解了。
    问题2:当然这么赋值拉,因为要个aaa类的对象呀。bval1是aaa类的对象!!!
    是不是可以换成这种写法:aaa 实例=new aaa(参数)  然后:  bb.Bval1 =实例问题3:因为bval1是aaa类的对象,所以它有val1的私有成员变量。
    能不能再详细一点解释一下,还是不是很懂!
    衷心的谢谢!
      

  6.   

    问题1:这个只是bbb类的私有变量,和aaa类无关,只是aaa的类型而已,那它将这个变量的类型定义为aaa类有什么作用呢?它的最终目的是什么呢?如果这样定义:private string bval1就很理解,是定义一个字符串变量。将类型定义为aaa类就确实不是很好理解了。aaa类的作用是声明了这个类并且定义了这个类的函数。你觉得private string bval1;很好理解对瓦。很简单,因为那里还有一个class string {....}在那里,所以,你在回来看,是不是一样的哪??问题2:当然这么赋值拉,因为要个aaa类的对象呀。bval1是aaa类的对象!!!
    是不是可以换成这种写法:aaa 实例=new aaa(参数)  然后:  bb.Bval1 =实例可以问题3:因为bval1是aaa类的对象,所以它有val1的私有成员变量。
    能不能再详细一点解释一下,还是不是很懂!怎么解释哪,bb.Bval1.Val1。 这个是property, 调用的是get{}里面的东西,所以自然会引导过去。你先解决下面几个概念:
    1。什么是类? 类可以看作是一种声明
    2。什么是对象。 光声明没有用,你要实例化它
    3。对象里面有什么? 对象里面只有成员变量的空间,比如aaa对象,里面的只有val1所站的空间。
      

  7.   

    bb.Bval1.Val1 和以前的bb.Bval1.getVal1是一样的,就是微软用Property来简化了
      

  8.   

    呵呵~~~~~小美大虾解释很透切,使自己明白了第一和第二题,其实是自己复杂化了,如果将aaa想像成string就行了,其实一点也不难理解。
    但问题3还是存在一点疑问
    bb.Bval1.Val1,要返回BBB类的属性,直接bb.Bval1不就行了?为什么一定要加上Val1呢?干马要引导过去啊?希望再次赐教,谢谢!!!
      

  9.   

    bb.Bval1.Val1,要返回BBB类的属性,直接bb.Bval1不就行了?为什么一定要加上Val1呢?干马要引导过去啊? 应为bb.Bval1只能取得这个aaa bval1 对象的值(其实是引用)。程序想取得bval1对象里面实际的value
      

  10.   

    楼上的朋友,如果是这样说的话,那bbb类里面的属性不是形同虚设了吗?bb.Bval1.Val1这句该怎样正确理解呢?bbb.Bval1它本来就已经可以return bval1了啊?小弟还是似懂非懂,希望能不能再换种说法来解释,谢谢!!!
         public   aaa   Bval1 
     {
                            get 
                            {   return   bval1;   } 
                            set 
                            {   bval1   =   value;   } 
                    } 
            } 
      

  11.   

    当然不是虚设,应为bb.Bval1调用的就是 get  
                            {   return   bval1;   }  
    注意大小写区分我不是说了嘛,c#简化了,property在其他语言里面是这样的getBavl1(){...}
    bb.Bval1.Val1
    在c++/java中的翻译是bb.getBavl1().getVal1();
    这样看得懂了嘛?