<%@ Page Language="C#" %>
<script runat="server">    public class Person
    {
        private string _Name;
    
        public Person(){}
        public string Name{
         get{
            return _Name;
            }
         set{
            _Name=value;
            }
            }
    }
  void Page_Load(object Sender,EventArgs E){
            Person myPerson=new Person();
            myPerson.Name="Susan";
    
            Name.Text=myPerson.Name;
           }<%@ Page Language="C#" %>
<script runat="server">    public class Person
    {
        private string Name;
    
        public Person(){}
        public string Name{
         get{
            return Name;
            }
         set{
            Name=value;
            }
            }
    }
  void Page_Load(object Sender,EventArgs E){
            Person myPerson=new Person();
            myPerson.Name="Susan";
    
            Name.Text=myPerson.Name;
           }
为什么第一个是正确的,而第二个运行时有错误呢?

解决方案 »

  1.   

    谢谢了。
    不过在第一个程序里:
    void Page_Load(object Sender,EventArgs E){
                Person myPerson=new Person();
                myPerson.Name="Susan";//这里为什么不写成myPerson._Name="Susan"呢?
        
                Name.Text=myPerson.Name;
               }
      

  2.   

    因为_Name是private的。楼主参看一下属性的用法
      

  3.   

    public string Name{
             get{
                return Name;
                }
             set{
                Name=value;
                }
                }
    死递归能运行才怪.
      

  4.   

    晕了!
    public class Person
    {
        private string peopleName;    public Person(){}
        public string peopleName{
         get{
            return peopleName;
            }
         set{
            peopleName=value;
            }
            }
    }    void Page_Load(object Sender,EventArgs E){
            Person myPerson=new Person();
            myPerson.peopleName="Susan";        Name.Text=myPerson.peopleName;
           }
    Compiler Error Message: CS0102: The type 'ASP.testobject_aspx.Person' already contains a definition for 'peopleName'Source Error: Line 7:      
    Line 8:          public Person(){}
    Line 9:          public string peopleName{          //这一行出错。
    Line 10:          get{
    Line 11:             return peopleName;不知到底错在哪,但是在类定义中把peopleName修改为_peopleName就ok了。
     
      

  5.   

    public string Name{
             get{
                return Name;
                }
             set{
                Name=value;
                }
                }
    死递归能运行才怪.我想请问一下这是死递归吗?不懂。
    为什么这个不是死递归?
        public string Name{
             get{
                return _Name;
                }
             set{
                _Name=value;
                }
                }
    该死的 "_" 号:不知道他有什么作用。
      

  6.   

    不一定要_Name,叫name/m_Name都行,只要不和属性同名即可。
      

  7.   

    定义的是:private string _Name,
    而调用的是myPerson.Name="Susan",
    _Name和Name是怎么关联起来的?
      

  8.   

    既然变量和属性不可相同的名称,那他们怎么关联的呢?
    哎,晚上还是去图书馆找本c#好好看看吧,我现在看的
    asp.net上c#语法讲的不多。感觉语言越高级,了解的
    原理就越少了。
      

  9.   

    看来楼主对get和SET的及访问修饰符的用法还不是很了解!!
     public class Person
        {
            private string _Name;
        
            public Person(){}
            public string Name{
             get{
                return _Name;
                }
             set{
                _Name=value;
                }
                }
        }
    来看看这段代码!!
    你在类person中定义了一个私有变量_Name,既然是私有变量也就是说只能在类中访问。而你初始化person类后是不能访问的,
    例 Person myPerson=new Person();
    myPerson._Name是不可以的。二,你在类中又定义了一个pulic变量Name,这个变量是初始化类后可以访问的,而在类中_Name的值就通过Name中的GET和SET操作去读取值或间接赋值。如果类中两个变量同名是不允许的!!因为是同一个作用域,而不是“_"的关系。只要不同名都可以
      

  10.   

    搞清楚了public string Name{ //这里是定义变量:
            private string _Name;  //这里是定义属性,变量和属性不能同名:
            myPerson.Name="Susan";  //这里是调用变量:变量在类里再访问属性。
      

  11.   

    属性和变量的关联,使用get和set访问器关联。
    楼主刚好讲反了//这里是定义变量:
    public string Name{
      get{} 
      set{} 
    }
    private string _Name; //这里是定义变量,变量和属性不能同名:
    myPerson.Name="Susan"; //这里是调用属性:属性在类里再访问私有变量
      

  12.   

    复制得快,没改过来
    //这里是定义属性
    public string Name{
      get{}
      set{}
    }