请问C# 类里面的 get 和 set 到底是个什么情况 ???? 字段 类 属性 方法 ????

clly001 2011-11-06 03:52:50
首先,请原谅我这个菜菜B 问这些问题吧。。。。


set 是set哪里的值 里面一般有个return 这个return是把什么返回 返回到哪里

get 是get哪里的值 里面也一般有个return 这个return是把什么返回 返回到哪里

还有看别人代码 get 或者set里面总有个莫名其妙的 value 这个东西在哪里来的 ? 没有声明 没有定义 没有铺垫 为

什么突然就出现了 !

还有类里面的字段和属性,名字一定要搞成一个大写 一个小写吗? 比如字段是 int xxx; 属性就得是 int Xxx ?


还有 如下这个:

public string name{get;set;}

private string name;

public string Name
{
get { return name; }
set { name= value; }
}

上面两个为什么意思是一样一样的?????


public class cls
{
private int book;
public int Book
{
get
{
Console.WriteLine("dsf");
return book;

}
set
{
Console.WriteLine("aaa");
book=value;

}
}
public static void Main()
{
cls obj = new cls();
obj.Book = 120; //注意这一句
Console.WriteLine(obj.Book);
}

}
运行结果为:
aaa
dsf
120


为什么是这个结果啊!! 啊 !! 啊!!!


...全文
527 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongxyt2 2011-11-06
  • 打赏
  • 举报
回复
你对属性设置值就执行Set 比如obj.Book=102

你想要获取属性的值就执行get 比如Consolw.WriteLine(obj.Book)

所以你若想要某个属性值发生改变就发生某个动作可以这样
private int aa;
public int AA
{
get
{
return aa;
}
set
{
if(aa!=value) OnHappen();//你的动作
aa=value
}
}
clly001 2011-11-06
  • 打赏
  • 举报
回复
~当对类的属性赋值的时候 就会执行类属性里面的set
~当要取类里面得到的值的时候,就会执行类属性里面的get


是这样吗?
风骑士之怒 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 clly001 的回复:]
public class cls
{
private int book; //cls的一个字段
public int Book //cls的一个属性? 还是cls里面book这个字段的属性? 应该是cls的一个属性吧?
{
get //得到? 得到什么啊? 得到下面的 obj.Book = 120;的赋值吗?
{
Console.WriteLine("dsf");……
[/Quote]

public int Book // cls对象的一个属性

get //当cls对象的实例调用Book属性的时候(如 cls a=new cls(); Console.WriteLine(a.Book); ),这个时候,将执行这个get方法,get方法必须有返回值

set //当对cls对象的实例调用Book属性进行赋值的时候,将调用set方法,而里面的value就是你赋值的时候的值


obj.Book = 120;

那么set方法里面的value就是120
风骑士之怒 2011-11-06
  • 打赏
  • 举报
回复
public class cls
{
private int book;
public int Book
{
get
{
Console.WriteLine("dsf");
return book;

}
set
{
Console.WriteLine("aaa");
book=value;

}
}
public static void Main()
{
cls obj = new cls();
obj.Book = 120; //注意这一句
Console.WriteLine(obj.Book);
}

}


obj.Book = 120;

这句赋值操作,将调用setter方法,所以会执行Console.WriteLine("aaa"); 并且私有变量book为120

Console.WriteLine(obj.Book);

这句获取操作,将调用getter方法,所以会执行Console.WriteLine("dsf"); 并且将私有变量book的值返回,所以输出就是:

aaa
dsf
120

风骑士之怒 2011-11-06
  • 打赏
  • 举报
回复
public string name{get;set;} 是简写
gui_sir814 2011-11-06
  • 打赏
  • 举报
回复
你就理解为属性的方法吧~
get 是读取的意思
{
}
set 是写 的意思
{
}
clly001 2011-11-06
  • 打赏
  • 举报
回复
public class cls
{
private int book; //cls的一个字段
public int Book //cls的一个属性? 还是cls里面book这个字段的属性? 应该是cls的一个属性吧?
{
get //得到? 得到什么啊? 得到下面的 obj.Book = 120;的赋值吗?
{
Console.WriteLine("dsf"); // 好吧,这里就打印出 dsf 了 是不?
return book; //这里是得到了 下面的120 赋值到字段book(也就是类里面的变量book了) 吗? 好吧,当
//做是 此时得到赋值120,赋值给book
}
set //设置,也就是写 写什么啊 哥哥?
{
Console.WriteLine("aaa"); //好吧,什么也不理,先执行:直接写出aaa
book=value; // 保留字value吗? 这个是什么意思? value是在上面的get里面的return的值么? 那么
//是get给他的,那就是120了。
}
}
public static void Main()
{
cls obj = new cls();
obj.Book = 120; //注意这一句
Console.WriteLine(obj.Book);
}

}
运行结果为:
aaa
dsf
120



是这样理解吗???
黄亮 2011-11-06
  • 打赏
  • 举报
回复
按照面向对象的原则,是不提倡public 变量的,java中就会增加一个Get方法,Set方法来处理。
但这样的写法很繁琐.Net做了个改进增加了属性的功能
 public string Name
{
get { return name; }
set { name= value; }
}
其本质就是一个Get方法,Set方法编译器会帮你处理
后来.net再次改进将其简化成
public string Name{get;set;}
黄亮 2011-11-06
  • 打赏
  • 举报
回复
public string Name{get;set;}
//是下面的简化版本

private string name;

public string Name
{
get { return name; }
set { name= value; }
}

quanben 2011-11-06
  • 打赏
  • 举报
回复
比较基础的C#语法问题,一个个来吧
1. get和set是属性的获取和设置方法入口,其实是和一般的方法差不多的(想想java是没有“属性”这个特性的,于是往往就用get_XXX()和set_XXX()代替实现,但是这样就无法像成员变量赋值那样的优雅的方式进行了(所以属性的全部意义就是能够提供设置set和获取get的像方法一样的实现,又能提供像成员变量那种方式的使用(但是还是有微小区别的,但这里就不涉及了))。get最终总是要return一个东西,其类型和属性类型一致,于是调用这个就能获得值;set总是要将调用者提供的数据设置进去,所以value这个保留字就是用来代表这个数据。
由于属性像方法差不多,且一般都是public的,根据c#通常的命名规则,就单词起始大写了。而且由于属性和其他成员是在一起的,所以不能重名。

2. “public string name{get;set;}和 ……是一样的”问题:
public string name{get;set;} 严格称作自实现(Auto-implemented)属性,个人感觉是一种“偷懒”写法,它就是由.net自行为这个属性提供后台数据支撑,而不是由程序员为其提供实现以及支撑变量(类成员变量),这样是最省事的方法。在您这里的两者中,唯一的区别就是后者有一个额外private的变量支撑这个属性,可以被这个类内引用。

3. 这个结果是正常的啊
obj.Book = 120; //这句调用了set,于是打印了aaa
Console.WriteLine(obj.Book);//这句先调了get,于是打了dsf,然后WriteLine打印了get出来的结果120

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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