关于 set; get; 的一些问题

flashrhx2010 2013-12-03 03:21:06
方法1:

private string _value;
public string Value
{
get { return _value; }
set { _value = value; }
}


方法2:

public string Value { get; set; }


请问大师们,这2中方法一样吗? 我看到很多的程序都有各种写法.但如果一样,为何有些写复杂了.难道是习惯问题?
...全文
448 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
卧_槽 2013-12-04
  • 打赏
  • 举报
回复
prop+tab自动生成属性代码。 第一种是C#都支持,第二种C#2.0之后支持。如果你在vs2005下开发,第二种是没法用的。 第二种的好处是少写两行代码,第一种的好处是可以在属性方法中添加自己的逻辑。
threenewbee 2013-12-03
  • 打赏
  • 举报
回复
和.net没有关系,是C# 3.0的语法,叫自动属性,那个私有变量叫后备字段,编译器会帮你生成。
qzyf1992 2013-12-03
  • 打赏
  • 举报
回复
其实还是有些不一样的 。有些第一种第二种不行,有些第二种第一种不行。比如接口中设置属性就只能用第二种
江湖影 2013-12-03
  • 打赏
  • 举报
回复
效果是一样的哦,后者更方便些
zlwork_84 2013-12-03
  • 打赏
  • 举报
回复
效果一样,第二个是framework3.5以后的语法糖写法。第一个是3.5以前的
wanghui0380 2013-12-03
  • 打赏
  • 举报
回复
这一般是看你用那版本的vs 熟练程序员大多掌握着vs快捷键和简写代码段的快捷编写手段 在vs里敲击prop+tab键其自带的简写代码段会自动完成代码(如果加装其他插件还有更简单的简写键,比如coderush的po+空格) 而在vs2010前,prop+tab生成滴是第一种写法,而vs2010后生成的是第二种写法(vs2010后如果想生成第一种的敲击propfull+tab)
小猪八Q 2013-12-03
  • 打赏
  • 举报
回复
引用 7 楼 ycg_893 的回复:
第二种写法在编译时会自动生成类似第一种写法,只是成员名称有点特殊;是3.0以后的一个功能,即在编写进可以不用写局部变量,提高编代速度而以,你可以按第二种写法,编译后,用反编译查看一下就什么都知道了; 但在特定情况下,第二种写法可能无法实现
确实第二种写法有些情况是满足不了的,比如说在WPF中使用MVVM绑定时的一种写法:

public class MainWindowViewModel : INotifyPropertyChanged
    {
        private ObservableCollection<string> _Collections;
        public ObservableCollection<string> Collections
        {
            get { return _Collections; }
            set {
                if (_Collections != value)
                {
                    _Collections = value;
                    OnPropertyChanged("Collections");
                }
            
            }
        }

        public MainWindowViewModel()
        {
        }

        public void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
hozw 2013-12-03
  • 打赏
  • 举报
回复
效果一样,上面的写法多数是自动生成的,下面的代码则是手写产生的。
真相重于对错 2013-12-03
  • 打赏
  • 举报
回复
荟香豆有几种写法
flashrhx2010 2013-12-03
  • 打赏
  • 举报
回复
引用 10 楼 zxy397472251 的回复:
[quote=引用 9 楼 flashrhx2010 的回复:] 明白了,完全是习惯问题。
你还是没明白 framework早期版本没有那种写法 后期才有的 是为了方便程序员 正如:早期没有linq一样 [/quote] 嗯嗯,早起开发者用了方法1,延续至今的习惯没有改,所以他们不用方法2. 也有自动生成工具生成的,自然而然的遵循了别人的习惯,也会选择方法1. 方法1虽然手写累一点,但是有内部逻辑的也必定要用方法1来实现。
wanghaijie3 2013-12-03
  • 打赏
  • 举报
回复
若没有约束,用方法2 有约束用方法1
水目 2013-12-03
  • 打赏
  • 举报
回复
区别应该没有 第一种清晰明了,当然加限制也是需要第一种的
CqCoder 2013-12-03
  • 打赏
  • 举报
回复
引用 9 楼 flashrhx2010 的回复:
明白了,完全是习惯问题。
你还是没明白 framework早期版本没有那种写法 后期才有的 是为了方便程序员 正如:早期没有linq一样
flashrhx2010 2013-12-03
  • 打赏
  • 举报
回复
明白了,完全是习惯问题。
小灰狼 2013-12-03
  • 打赏
  • 举报
回复
如果get, set 里要加一些逻辑,就只能用第一种写法了
ycg_893 2013-12-03
  • 打赏
  • 举报
回复
第二种写法在编译时会自动生成类似第一种写法,只是成员名称有点特殊;是3.0以后的一个功能,即在编写进可以不用写局部变量,提高编代速度而以,你可以按第二种写法,编译后,用反编译查看一下就什么都知道了; 但在特定情况下,第二种写法可能无法实现
junlinfushi 2013-12-03
  • 打赏
  • 举报
回复
zhujiazhi 2013-12-03
  • 打赏
  • 举报
回复
方法1和方法2是一样的, 如果一样,为何有些写复杂了.难道是习惯问题? 貌似是.net3.0之前是没有自动属性的,所以老一点的代码,都会像方法1一样来写
加载更多回复(3)

110,499

社区成员

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

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

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