标签: automatic-properties

在所有者类中使用属​​性vs后备字段

我喜欢C#中自动实现的属性,但最近有这只大象站在我的小隔间里,我不知道该怎么办.

如果我使用自动实现的属性(以下称"aip"),那么我不再需要内部使用的私有支持字段.这很好,因为aip没有副作用.但是如果稍后我需要在get或set中添加一些额外的处理呢?

现在我需要创建一个支持字段,这样我就可以扩展我的getter和setter.这适用于使用该类的外部代码,因为它们不会注意到差异.但是现在所有对aip的内部引用都会在访问属性时调用这些副作用.现在,必须重构对ate aip的所有内部访问才能使用后备字段.

所以我的问题是,大多数人都做了什么?您是使用自动实现的属性还是更喜欢始终使用后备字段?您如何看待具有副作用的属性?

c# properties automatic-properties

9
推荐指数
1
解决办法
6495
查看次数

C#3.0:自动属性 ​​- 编译器创建的私有变量的名称是什么

我正在检查.NET 3.5的新功能,发现在C#3.0中,我们可以使用

public class Person 
{    
 public string FirstName  { get; set; }
 public string LastName  { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

代替

private string name;

public string Name
{
  get { return name; }
  set { name = value; }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用自动属性,名称的私有变量名称是什么?互联网上的教程说编译器会自动创建一个私有变量.那么我如何使用/访问私有变量,如果我想在这个类的方法中使用它?

automatic-properties c#-3.0

8
推荐指数
2
解决办法
6663
查看次数

为什么C#自动属性不支持VB 2010等默认值?

看看新的VB 2010功能,我偶然发现了对Auto-Implemented Properties的支持.

由于我正在使用C#,这看起来很熟悉,但我注意到VB确实添加了我希望在C#中拥有的功能:为自动实现的属性设置任意默认值:

Public Class Person

    Property Name As String = "Scott Guthrie"
    Property Age as Integer = 35

End Class
Run Code Online (Sandbox Code Playgroud)

我真的很喜欢在C#中使用自动属性.这样可以节省我们每次只需要默认值时引入支持字段并将其挂接到属性的工作量,从而不必要地使代码混乱.

我想知道为什么这也不是在C#中引入的?不这样做的理由是什么?是否正在进行语法讨论,或者实现此方法是否存在技术限制?

c# vb.net .net-4.0 automatic-properties

8
推荐指数
2
解决办法
1459
查看次数

.NET中自动属性的用途

为什么是这样:

    public string Foo {get;set;}
Run Code Online (Sandbox Code Playgroud)

被认为比这更好:

    public string Foo;
Run Code Online (Sandbox Code Playgroud)

我不能为我的生活而努力.任何人都能解释一下吗?

谢谢

.net properties automatic-properties

8
推荐指数
1
解决办法
232
查看次数

c#constructors vs auto-properties和object initializers

我已经使用了很多自动属性但是我已经越来越远离那些使用构造函数中初始化的readonly支持字段设置类.我删除了所有的setter,只有在属性明显需要setter的情况下才添加.

我发现这使得我的课程更加健壮和优雅OO明智而且我正在踢我自己不早点这样做.

我发现构造函数在c#代码示例中一般都没有得到充分利用,我认为自动属性和对象初始化程序是其中的一个重要部分,所以我的问题是为什么c#团队推送这样的功能而不是更多地关注提供最佳功能的功能实践更多.一般来说,我认为编写糟糕的代码太容易了,并且相信可以帮助编码人员编写好的代码

c# automatic-properties object-initializers

8
推荐指数
1
解决办法
4823
查看次数

如何在C#中将auto-property初始化为非null?

我有一个属性:

public Dictionary<string, string> MyProp { get; set; }
Run Code Online (Sandbox Code Playgroud)

当我调用该属性来添加项时,我得到一个NullReferenceException.

我如何在属性本身进行空检查,如果它为null,它会给我一个新的?同时保持自动财产模式.

谢谢!

.net c# initialization automatic-properties

8
推荐指数
2
解决办法
6776
查看次数

C++中的自动变量

可能重复:
在C++中,为什么要new尽量少用?

在C++中分配的自动变量在哪里?在堆栈或堆上?

另外,我在7.9中读到- 堆栈和堆,堆栈上分配的所有内存在编译时都是已知的.这是真的吗?这是否意味着堆栈上只发生静态内存分配?

另外,请提及链接,参考C++中有关内存分配的完整说明文字.

c++ memory heap stack automatic-properties

8
推荐指数
1
解决办法
7726
查看次数

如何默认svn:关键字启用?

有没有办法默认启用svn:keywords,这样每次添加新的源文件时都不需要为每个关键字启用此属性?

svn automatic-properties version-control-keywords

8
推荐指数
2
解决办法
7258
查看次数

没有ivars - >我错过了什么?

我从不使用伊娃.我只使用属性 - 有时使用基本类型分配属性,有时使用"私有"类扩展.我已经看到了不使用ivars切换到ARC的优点 - 我有一些带有大量ivars的借用代码,我仍然不能"ARC",因为我不知道需要保留什么.所以我知道使用ivars的一些优点,但使用ivars而不是属性有什么好处?

注意:我完全依赖于(通过编译器?)为属性声明自动添加的ivars.

不要标记为关闭:我已经看过其他一些问题,比如这个这个,没有一个问题.标题看起来不错,但就像SO上的那么多问题一样,问题是一堆奇怪的疑惑和其他东西.

objective-c automatic-properties ios

8
推荐指数
1
解决办法
559
查看次数

自动属性初始化器Singleton实现

因此,使用全新的C#6,我们获得了那些整洁的自动属性初始化器.我想我也可以利用这些来制作比以往更简洁的单身人士.显然其他人也有这个想法.

public sealed class Singleton
{
    public static Singleton Instance { get; } = new Singleton();
    private Singleton() { /* some initialization code */ }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 它的线程安全性如何?
  2. 它是多么懒惰,或者实际创建实例的时候?(不是优先考虑,但对未来的参考会有好处)
  3. 总体来说这是一个好主意吗?

(它可能看起来与这个问题类似,但事实并非如此)

.net c# singleton automatic-properties c#-6.0

8
推荐指数
1
解决办法
1284
查看次数