标签: automatic-properties

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#中将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
查看次数

自动属性初始化器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
查看次数

您经常看到滥用C#速记吸气剂/孵化器?

在C#中,您可以以比其他语言更简单的方式创建getter/setter:

public int FooBar { get; set; }
Run Code Online (Sandbox Code Playgroud)

这将创建一个内部私有变量,您无法直接使用外部属性"FooBar"直接访问它.

我的问题是 - 你多久经常看到这种滥用?它似乎很有可能经常违反封装最佳实践.不要误解我的意思,我会酌情使用它,并为只读的只写类型的属性使用它的部分变体,但是你的代码库中的其他作者对它的不愉快经历是什么?

澄清:当私人变量合适时,滥用的预期定义确实会产生这样的属性.

c# getter setter encapsulation automatic-properties

7
推荐指数
1
解决办法
3757
查看次数

始终使用this-keyword作为前缀(自动)属性是一种好习惯吗?

自从我发现汽车房产以来,我试着到处使用它们.以前我会在课堂上使用的每个属性都会有一个私人成员.现在这被auto属性所取代.我通常使用普通成员字段的方式在我的类中使用该属性.问题是该属性以国会大厦开始,这使得在以这种方式使用它时看起来有点奇怪.我之前并不介意属性从国会大厦开始,因为它们总是落后于"点".现在我发现自己在内部添加了我内部使用的所有属性this.,以此来抚慰我的感觉.

我的困境是,在我总是有点反对使用内部成员的所有用法前缀this.,除非"必要"(如在setter或构造函数中).所以我有点想找到第二个意见.有没有一个标准的好方法来做到这一点?我应该停止抱怨(我倾向于成为"蚂蚁驼背"(荷兰语表达))?

之前:

class Foo
{
    private Bar bar;
    public Bar Bar { get { return bar; } }

    public Foo(Bar bar)
    {
        this.bar = bar;
    }

    public void DoStuff()
    {
        if(bar != null)
        {
            bar.DoMethod();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

后:

class Foo
{
    public Bar Bar {get; private set;}

    public Foo(Bar bar)
    {
        this.Bar = bar;
        // or
        Bar = bar;
    }

    public void DoStuff()
    {
        if(this.Bar != null)
        {
            this.Bar.DoMethod();
        }
        // or
        if(Bar != …
Run Code Online (Sandbox Code Playgroud)

c# this automatic-properties prefix

7
推荐指数
2
解决办法
400
查看次数

得到; 组; C#中的语法

在C#中,我可以拥有一个属性而无需声明私有变量.我的VB6代码看起来像这样

'local variable(s) to hold property value(s)
Private mvarPhoneNumber As String 'local copy
Public Property Let PhoneNumber(ByVal vData As String)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.PhoneNumber = 5
    mvarPhoneNumber = vData
End Property


Public Property Get PhoneNumber() As String
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.PhoneNumber
    PhoneNumber = mvarPhoneNumber
End Property
Run Code Online (Sandbox Code Playgroud)

现在看起来像这样.

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

如何在C#中的getter和setter方法中进行验证?我尝试添加这样的验证.

public string PhoneNumber …
Run Code Online (Sandbox Code Playgroud)

.net c# vb6 syntax automatic-properties

7
推荐指数
1
解决办法
2万
查看次数

简单类型的只读自动属性:初始化程序VS表达式主体获取器

在C#6.0中,新语法允许我们使用初始化程序编写只读自动属性:

public bool AllowsDuplicates { get; } = true;
Run Code Online (Sandbox Code Playgroud)

同样,我们可以使用表达式body getter来编写它:

public bool AllowsDuplicates => true;
Run Code Online (Sandbox Code Playgroud)

对于简单类型,这两个应该具有相同的效果:返回true的只读自动属性.

但是他们中的一个比另一个更受欢迎吗?我怀疑前者使用了支持字段:

private readonly bool _backingField = true;
public bool AllowsDuplicates {
    get {
        return _backingField;
    }
}
Run Code Online (Sandbox Code Playgroud)

而后者变成了类似的东西:

public bool AllowsDuplicates {
    get {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的,还是编译器比这更聪明?

c# automatic-properties c#-6.0

7
推荐指数
1
解决办法
630
查看次数

C#3.0自动属性 ​​- 是否可以添加自定义行为?

我想知道是否有任何方法可以为auto属性get/set方法添加自定义行为.

我能想到的一个明显的例子是希望每个set属性方法都PropertyChanged作为System.ComponentModel.INotifyPropertyChanged实现的一部分调用任何事件处理程序.这将允许类具有可以观察到的众多属性,其中每个属性都使用自动属性语法定义.

基本上我想知道是否有任何类似于get/set模板或post类/范围的get/set钩子.

(我知道可以通过稍微冗长的方式轻松实现相同的最终功能 - 我只是讨厌重复模式)

.net c# properties automatic-properties

6
推荐指数
1
解决办法
4276
查看次数

从变量快速创建C#属性

对于C#,我讨厌写出变量然后写出所有属性.没有办法选择所有变量,右键单击并创建所有属性.

c# automatic-properties

6
推荐指数
3
解决办法
2万
查看次数