c#中类的属性问题。

linuxjava01 2006-05-24 12:17:57
<%@ 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;
}
为什么第一个是正确的,而第二个运行时有错误呢?
...全文
254 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kssys 2006-05-24
  • 打赏
  • 举报
回复
不一定要_Name,叫name/m_Name都行,只要不和属性同名即可。
kssys 2006-05-24
  • 打赏
  • 举报
回复
楼主,属性是不会存储值的,值应存在变量中。变量和属性不可相同的名称
linuxjava01 2006-05-24
  • 打赏
  • 举报
回复
public string Name{
get{
return Name;
}
set{
Name=value;
}
}
死递归能运行才怪.我想请问一下这是死递归吗?不懂。
为什么这个不是死递归?
public string Name{
get{
return _Name;
}
set{
_Name=value;
}
}
该死的 "_" 号:不知道他有什么作用。
linuxjava01 2006-05-24
  • 打赏
  • 举报
回复
晕了!
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了。

henryfan1 2006-05-24
  • 打赏
  • 举报
回复
public string Name{
get{
return Name;
}
set{
Name=value;
}
}
死递归能运行才怪.
kssys 2006-05-24
  • 打赏
  • 举报
回复
因为_Name是private的。

楼主参看一下属性的用法
linuxjava01 2006-05-24
  • 打赏
  • 举报
回复
谢谢了。
不过在第一个程序里:
void Page_Load(object Sender,EventArgs E){
Person myPerson=new Person();
myPerson.Name="Susan";//这里为什么不写成myPerson._Name="Susan"呢?

Name.Text=myPerson.Name;
}
viena 2006-05-24
  • 打赏
  • 举报
回复
Name是保留字
kssys 2006-05-24
  • 打赏
  • 举报
回复
复制得快,没改过来
//这里是定义属性
public string Name{
  get{}
  set{}
}
kssys 2006-05-24
  • 打赏
  • 举报
回复
属性和变量的关联,使用get和set访问器关联。
楼主刚好讲反了

//这里是定义变量:
public string Name{
  get{}
  set{}
}
private string _Name; //这里是定义变量,变量和属性不能同名:
myPerson.Name="Susan"; //这里是调用属性:属性在类里再访问私有变量
linuxjava01 2006-05-24
  • 打赏
  • 举报
回复
搞清楚了public string Name{ //这里是定义变量:
private string _Name; //这里是定义属性,变量和属性不能同名:
myPerson.Name="Susan"; //这里是调用变量:变量在类里再访问属性。
yanghuijun 2006-05-24
  • 打赏
  • 举报
回复
看来楼主对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操作去读取值或间接赋值。

如果类中两个变量同名是不允许的!!因为是同一个作用域,而不是“_"的关系。只要不同名都可以
linuxjava01 2006-05-24
  • 打赏
  • 举报
回复
既然变量和属性不可相同的名称,那他们怎么关联的呢?
哎,晚上还是去图书馆找本c#好好看看吧,我现在看的
asp.net上c#语法讲的不多。感觉语言越高级,了解的
原理就越少了。
linuxjava01 2006-05-24
  • 打赏
  • 举报
回复
定义的是:private string _Name,
而调用的是myPerson.Name="Susan",
_Name和Name是怎么关联起来的?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧