标签: automatic-properties

了解自动实现的属性

我有使用自动实现的属性的简单类:

Public Class foo
{
    public foo() { }  

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

我显然在我的类中使用变量BarName,现在需要在设置属性值时添加逻辑(它必须全部为大写,如图).这是否意味着我现在需要为BarName创建一个私有变量,例如_BarName,并将我的类中使用的当前BarName变量更改为_BarName?

Public Class foo
{
    public foo() {}  

    private string _BarName = "";
    public string BarName 
    { 
        get {return _BarName;}
        set {_BarName = Value.ToString().ToUpper();}
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在努力确保我理解使用自动实现的属性的含义,以及当我/如果我需要更改某些内容时它会带来什么.我假设重构,如上所示,不是一个突破性的变化,因为该属性基本上保持不变; 它只是在课堂上做了一些工作,以保持这种方式并添加所需的逻辑.

另一个可能更有意义的例子是我需要在使用setter或getter时调用某个方法; 更多然后改变价值.

这似乎是设置属性的代码行和行的公平交易.

c# properties automatic-properties .net-3.5

3
推荐指数
3
解决办法
4011
查看次数

C#自动属性

C#3.0的自动属性是否完全取代了归档?

我的意思是,我可以直接使用该属性而不是归档作为属性作为私人支持字段.(对不起,我只是这样理解).

int a;

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

c# automatic-properties

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

从getter/setter到属性的自动转换

我有一个用C++编写的大型库,有人创建了一个以自动方式在python(2.6)中使用它的接口.现在我有很多带有getter和setter方法的类.真的:我讨厌他们.

我想使用属性重新实现具有更多pythonic接口的类.问题是每个班级都有数百个getter和setter,而且我有很多课程.如何自动创建属性?

举例来说,如果我有一类叫做MyClassGetX()SetX(x),GetY,SetY,等...方法,我怎么能自动创建一个派生类MyPythonicClass与属性X(可读,如果有getter和可写的,如果有二传手)等上?我想要一种机制让我选择跳过一些getter/setter夫妇,最好是手工完成工作.

python properties metaprogramming automatic-properties

3
推荐指数
1
解决办法
2349
查看次数

自动属性:在"设置"期间检查/验证

我想我们都同意C#3.0中的自动属性很棒.像这样的东西:

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

减少到这个:

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

可爱!

但是,如果我想在"设置"时使用ToUpperInvariant()方法转换Name字符串,我应该怎么做.我是否需要恢复旧的C#2.0创建属性的风格?

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

或者有更优雅的方式来实现这一目标吗?

setter automatic-properties c#-3.0

3
推荐指数
1
解决办法
893
查看次数

快速简单的二传手和吸气剂?

允许这样做:

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

但应用程序是否为变量创建/分配空间?我经常这样做

private int age = 0;
public int Age
{
get { return this.age; }
set { this.age = value; }
}
Run Code Online (Sandbox Code Playgroud)

.net c# automatic-properties

3
推荐指数
1
解决办法
164
查看次数

C#autoproperty与普通字段

在这个例子中,Foo.Something和Bar.Something之间有什么有效的区别吗?

class Foo
{
    public string Something;
}

class Bar
{
    public string Something{get; set;}
}

class Program
{
    static void Main(string[] args)
    {
        var MyFoo = new Foo();
        MyFoo.Something = "Hello: foo";
        System.Console.WriteLine(MyFoo.Something);

        var MyBar = new Bar();
        MyBar.Something = "Hello: bar";
        System.Console.WriteLine(MyBar.Something);
        System.Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

AFAIK他们的行为完全相同.如果他们为什么不在Foo中使用普通的字段?在java中,我们使用setter来强制执行新的不变量而不会破坏代码和getter来返回安全数据但是在c#中你总是可以将Foo重写为:

class Foo
{
    private string _Something;
    public string Something
    {
        get { 
            //logic
            return _Something; 
            }
        set { 
            //check new invariant
            _Something = value; 
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

旧代码不会被破坏.

c# automatic-properties

3
推荐指数
1
解决办法
795
查看次数

是否有一个Reflector加载项或其他工具来处理自动属性?

Reflector在自动属性中显示此信息:

public string AddressLine1
{
    [CompilerGenerated]
    get
    {
        return this.<AddressLine1>k__BackingField;
    }
    [CompilerGenerated]
    set
    {
        this.<AddressLine1>k__BackingField = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何加载项或其他工具将其转换为:

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

我不相信这些加载项中的任何一个都支持上述内容:http://www.codeplex.com/reflectoraddins

如果你证明我错了,买就会很开心.

c# reflector automatic-properties c#-3.0

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

这是自动属性的正确语法吗?

我已经编程了很长时间,很难跟上语言的变化...

在.net v2之后设置这样的属性真的没问题

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

不需要内场?好像编译器最近会处理这个问题?

c# automatic-properties

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

VB.NET自动实现的属性 - VS2010和VS2008之间的兼容性

我正在开发一个ASP.NET项目,我在Visual Studio 2010中使用VB.NET.项目中的一些其他开发人员正在使用Visual Studio 2008.我们都将我们的代码检查到单个SVN存储库中.我想在VB.NET中开始使用Auto-Implemented Properties ...

Property FirstName as String
Run Code Online (Sandbox Code Playgroud)

代替 ...

Private FirstName as String
  Public Property FirstName() As String
  Get
    Return _FirstName
  End Get
  Set(ByVal value As String)
    _FirstName = value
  End Set
End Property
Run Code Online (Sandbox Code Playgroud)

我担心的是,对于那些使用VS2008的人而言,这可能会让事情变得更糟.如果使用VS2008的人需要修改使用Auto-Implemented Properties的类,会发生什么?我假设因为一切都编译成IL代码,那么二进制兼容性就没有问题了.虽然编辑源时会出现问题.我是对的还是错的?谢谢.

vb.net automatic-properties visual-studio-2010 visual-studio-2008

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

当我制作一个自动财产时,后台会发生什么?

编辑:不是一个完全不同的问题,这个我要问如何自动性质内部工作

当我制作一个自动财产时,后台会发生什么?

这相当于

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

这个

 private int _someField;
 public int SomeProperty 
 {
    get { return _someField;}
    set { _someField = value;}
 }
Run Code Online (Sandbox Code Playgroud)

这是字面上发生的事情(即创建一个私有字段),还是只是为了解释事物,它的工作方式不同

c# automatic-properties

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