C#获取集与未获取集

时间:2014-03-19 05:33:05

标签: c# get set

我已经查看了至少10个关于获取/设置的SO问题,但找不到我的问题。所以我希望这不是重复。

public class myint
{
    public int value{get;set;}
}

vs

public class myint
{
    public int value;
}

以上两个代码对我来说都是一样的。如果我想使用myint类,我只需编写下面的代码,它就可以在任何一个类上运行。

myint A;
A.value=10;

那么获取/设置的用途是什么?

5 个答案:

答案 0 :(得分:1)

http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

  

属性是一个提供灵活读取机制的成员,   写或计算私有字段的值。可以使用属性   好像他们是公共数据成员,但他们实际上是特殊的   称为访问器的方法。这样可以轻松访问数据   仍然有助于提高方法的安全性和灵活性。

除了公共{get;set;}与公共成员变量的区别之外,我还有以下几点:

  1. 数据绑定需要属性。
  2. get和set可以有不同的访问者(例如public int Value {get; protected set;}
  3. 获得;设置;可以是界面的一部分,例如interface IHasValueGetter { public int Value {get;}}
  4. What is the difference between a Field and a Property in C#?

答案 1 :(得分:0)

你问的是使用公共实例变量和我假设的getter / setter属性之间有什么区别。

属性允许您进一步封装获取或设置变量的逻辑,例如添加简单的验证逻辑。例如,如果有人将您的值设置为小于零,则可能会抛出异常。您还可以在getter / setter中添加更多逻辑,以便例如同步特定字段。

其他一些差异:

  • 在大多数.NET UI框架中,属性可以轻松地用于数据绑定。
  • 反射的工作方式不同。
  • 获取/设置的访问级别不同,例如您的实例变量,您可以在readonly,private,protected,static等之间进行选择。
  • 访问属性需要更多开销。除了游戏和性能敏感的情况之外,这在大多数用例中通常都不重要。

答案 2 :(得分:0)

你可以删除get并设置它不会影响代码和工作,因为你已经使用Access类型public定义了int类型的变量,因此属性主要用于访问类的私有成员在你的情况下不存在所以继续并删除它如果在最顶级的类中你用私有修饰符定义一个变量来访问它get和set是必要的属性!

答案 3 :(得分:0)

// This is an example of property...
public class myint
{
    public int value{get;set;}
}

// This is an example of field...
public class myint
{
    public int value;
}

差异:

  • 数据绑定技术仅适用于属性,而不适用于字段
  • 字段可以用作out / ref参数的输入。属性可能没有。
  • 属性可能会抛出异常 - 字段永远不会这样做

    示例:

    class Person
    {
       private string _name;
       public string FirstName
       {
           get
           {
               return _name ?? string.Empty;
           }
           set
           {
               if (value == null)
                  throw new System.ArgumentNullException("value");
               _name = value;
           }
       }
    

    }

  • 属性支持getter / setter的不同可访问性 - 字段不支持(但字段可以只读)

答案 4 :(得分:0)

这是我们何时使用get set
根据{{​​3}}的财产使用指南:

  
      
  • 当成员是逻辑数据成员时使用属性。在以下成员声明中,Name是属性,因为它是一个
      该班的逻辑成员。
  •   
     

在以下时间使用方法:

     
      
  • 该操作是转换,例如Object.ToString。
  •   
  • 操作非常昂贵,您希望与用户沟通,他们应该考虑缓存结果。
  •   
  • 使用get访问器获取属性值会产生可观察到的副作用。
  •   
  • 连续两次致电会员会产生不同的结果。
  •   
  • 执行顺序很重要。请注意,应该能够以任何顺序设置和检索类型的属性。
  •   
  • 该成员是静态的,但返回一个可以更改的值。
  •   
  • 该成员返回一个数组。返回数组的属性可能会产生误导。通常有必要返回中的副本   内部数组使用户无法更改内部状态。对此,
      再加上用户可以轻易地认为它是索引的事实   属性,导致代码效率低下。在以下代码示例中,
      每次调用Methods属性都会创建一个数组副本。作为一个   结果,将在下面的数据中创建2n + 1个数组副本   循环。
  •