.net Get与Set属性, 求解释!!!!!!!!!!!!!!!!!!

pz25925 2013-08-05 09:21:16

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
test t = new test();
t.Name = "3"; //设置这个name,我并没有执行get方法,而应该是set。为什么这里监视到t.name = "1"?

Console.WriteLine(t.Name);
Console.ReadLine(); //最后输出结果为 "1"
}
}

public class test
{
private string name;
public string Name
{
get { if (true) { return "1"; } }
set { name = value; }
}
}
}
...全文
281 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜色镇歌 2013-08-06
  • 打赏
  • 举报
回复
引用 18 楼 pz25925 的回复:
[quote=引用 17 楼 a346729576 的回复:] 你在set 打个断点。 走到t.Name = "3";的时候会进到断点,set完了 class test 里的name已经变成3 了,但是你输出的时候走的是get 会返回1。 你监视的是 t.name 而不是 t.name="3" t.name当然是走的get。
嗯,就是這樣的。 t.name 也會走get , 以前一直都沒有留意這方面。 產生這個問題的原因主要是在修改一個bug時候, 一個dto的字段,無論怎麼改,結果監視還是會變成原來的值。 所以引發了後續的疑問。 17L您解釋的也非常清楚了。 謝謝。[/quote]解释的非常清楚所以一分都不给
pz25925 2013-08-06
  • 打赏
  • 举报
回复
引用 17 楼 a346729576 的回复:


你在set 打个断点。 走到t.Name = "3";的时候会进到断点,set完了 class test 里的name已经变成3 了,但是你输出的时候走的是get 会返回1。

你监视的是 t.name 而不是 t.name="3" t.name当然是走的get。


嗯,就是這樣的。 t.name 也會走get , 以前一直都沒有留意這方面。

產生這個問題的原因主要是在修改一個bug時候,
一個dto的字段,無論怎麼改,結果監視還是會變成原來的值。
所以引發了後續的疑問。

17L您解釋的也非常清楚了。

謝謝。
夜色镇歌 2013-08-06
  • 打赏
  • 举报
回复


你在set 打个断点。 走到t.Name = "3";的时候会进到断点,set完了 class test 里的name已经变成3 了,但是你输出的时候走的是get 会返回1。

你监视的是 t.name 而不是 t.name="3" t.name当然是走的get。
pz25925 2013-08-06
  • 打赏
  • 举报
回复
大家在仔細看下帖子就知道我想問的問題了。
//设置这个name,我并没有执行get方法,而应该是set。为什么这里监视到t.name = "1"? 
t.Name = "3";
我的問題是這個哦。 也謝謝各位的回答,討論。
pz25925 2013-08-06
  • 打赏
  • 举报
回复
sorry 14L說錯, t.name = '3' 會走set而不是get
pz25925 2013-08-06
  • 打赏
  • 举报
回复
引用 12 楼 a346729576 的回复:
t.Name = "3"; //设置这个name,我并没有执行get方法,而应该是set。为什么这里监视到t.name = "1"? 这一步你设置过了, Console.WriteLine(t.Name); 这里又重新走的get 执行if (true) { return "1"; } 所以你怎么赋值返回的永远是1
我的疑問不是最後 write 為 1 , 而是在監視 t.name = “3” 的時候結果為1 , t.name = '3' 會走get而不是set
吞风吻雨 2013-08-06
  • 打赏
  • 举报
回复
get { if (true) { return "1"; } }给成 get { if (true) { return name; } }
夜色镇歌 2013-08-06
  • 打赏
  • 举报
回复
t.Name = "3"; //设置这个name,我并没有执行get方法,而应该是set。为什么这里监视到t.name = "1"? 这一步你设置过了, Console.WriteLine(t.Name); 这里又重新走的get 执行if (true) { return "1"; } 所以你怎么赋值返回的永远是1
夜色镇歌 2013-08-06
  • 打赏
  • 举报
回复
t.Name 是走的get,t.Name 永远是1.。。。
pz25925 2013-08-06
  • 打赏
  • 举报
回复
謝謝各位, 大家可以看看6L, 原來監視的時候也會執行 get
pz25925 2013-08-06
  • 打赏
  • 举报
回复
大家沒注意到我第一段的注釋,
引用 6 楼 soaringbird 的回复:
你监视的时候就执行了get
6L的朋友有提到這點。 我在
t.Name = "3"; //這裡執行 set ,沒有執行 get ,它此時的值應該會為 3 
最後在
Console.WriteLine(t.Name);  //這裡會執行 get 返回 1
异常异长 2013-08-06
  • 打赏
  • 举报
回复
对t.name 赋值时 调用的是set属性, 从t.name 取值时 调用的是get属性。 所以, 使用 write (t.name )时 应该是走get。 所以 虽然SET的是3 但是 get的时候走的是1. 个人见解。
taotao_live 2013-08-06
  • 打赏
  • 举报
回复
不管你Set什么 ,Get永远是 1 ,解释完毕
夜色镇歌 2013-08-06
  • 打赏
  • 举报
回复
引用 20 楼 pz25925 的回复:
[quote=引用 19 楼 a346729576 的回复:] [quote=引用 18 楼 pz25925 的回复:] [quote=引用 17 楼 a346729576 的回复:] 你在set 打个断点。 走到t.Name = "3";的时候会进到断点,set完了 class test 里的name已经变成3 了,但是你输出的时候走的是get 会返回1。 你监视的是 t.name 而不是 t.name="3" t.name当然是走的get。
嗯,就是這樣的。 t.name 也會走get , 以前一直都沒有留意這方面。 產生這個問題的原因主要是在修改一個bug時候, 一個dto的字段,無論怎麼改,結果監視還是會變成原來的值。 所以引發了後續的疑問。 17L您解釋的也非常清楚了。 謝謝。[/quote]解释的非常清楚所以一分都不给[/quote] 哎呀。。你來晚了。。那個時候已經結貼了。。 [/quote]LZ我恨你
pz25925 2013-08-06
  • 打赏
  • 举报
回复
引用 19 楼 a346729576 的回复:
[quote=引用 18 楼 pz25925 的回复:] [quote=引用 17 楼 a346729576 的回复:] 你在set 打个断点。 走到t.Name = "3";的时候会进到断点,set完了 class test 里的name已经变成3 了,但是你输出的时候走的是get 会返回1。 你监视的是 t.name 而不是 t.name="3" t.name当然是走的get。
嗯,就是這樣的。 t.name 也會走get , 以前一直都沒有留意這方面。 產生這個問題的原因主要是在修改一個bug時候, 一個dto的字段,無論怎麼改,結果監視還是會變成原來的值。 所以引發了後續的疑問。 17L您解釋的也非常清楚了。 謝謝。[/quote]解释的非常清楚所以一分都不给[/quote] 哎呀。。你來晚了。。那個時候已經結貼了。。
  • 打赏
  • 举报
回复
楼主,你永远都在return 1。。。。。
孫大聖 2013-08-05
  • 打赏
  • 举报
回复
这是我对于属性的理解, 不知道对你有帮助没 http://www.cnblogs.com/youmeng/archive/2013/06/06/3122784.html
soaringbird 2013-08-05
  • 打赏
  • 举报
回复
你监视的时候就执行了get
全栈极简 2013-08-05
  • 打赏
  • 举报
回复
get { if (true) { return "1"; } } //get时,直接返回1 Console.WriteLine(t.Name);//这里t.Name取属性的值,当然会找到get,得到上面的1.
Fat-Shaw 2013-08-05
  • 打赏
  • 举报
回复
你在最后输出的时候是在get,get的返回结果是1.当然最后输出1啊。
加载更多回复(3)

111,125

社区成员

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

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

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