C#获取/设置语法用法

时间:2011-01-11 20:46:24

标签: c# syntax properties

这些是Person类的声明。

protected int ID { get; set; }
protected string Title { get; set; }
protected string Description { get; set; }
protected TimeSpan jobLength { get; set; }

如何使用get / set?在main中,我实例化了一个

Person Tom = new Person();

Tom.set / get ??

怎么样?

我习惯于编写C ++样式,只需编写int getAge()和void setAge()函数。但是在C#中有快捷方式处理get和set?

7 个答案:

答案 0 :(得分:71)

假设您有权访问它们(您声明的属性为protected),您可以像这样使用它们:

Person tom = new Person();
tom.Title = "A title";
string hisTitle = tom.Title;

这些是properties。它们基本上是一对getter / setter方法(虽然你可以只有一个getter,或者只是一个setter),并带有适当的元数据。您给出的示例是自动实现的属性,其中编译器正在添加支持字段。您可以自己编写代码。例如,您声明的Title属性是这样的:

private string title; // Backing field
protected string Title
{
    get { return title; }  // Getter
    set { title = value; } // Setter
}

...除了支持字段被赋予“无法形容的名称” - 您无法在C#代码中引用。你被迫通过房产。

您可以使财产的一部分比另一部分更受限制。例如,这很常见:

private string foo;
public string Foo
{
    get { return foo; }
    private set { foo = value; }
}

或作为自动实施的属性:

public string Foo { get; private set; }

这里“getter”是公开的,但“setter”是私有的。

答案 1 :(得分:3)

假设你有一个歌曲课(你可以在下面参考),传统的实现方式如下

 class Song
  {
       private String author_name;
       public String setauthorname(String X) {}; //implementation goes here
       public String getauthorname() {}; //implementation goes here
  }

现在,考虑一下这个类的实现。

      class Song 
      {
            private String author_name;
            public String Author_Name
            { 
                 get { return author_name; }
                set { author_name= value; }
             }
      }

在“主要”课程中,您将代码编写为

    class TestSong
    { 
      public static void Main(String[] Args)
      {
          Song _song = new Song(); //create an object for class 'Song'    
          _song.Author_Name = 'John Biley';
          String author = _song.Author_Name;           
          Console.WriteLine("Authorname = {0}"+author);
      }
    }

要注意的一点;

您设置/获取的方法应该是公开的或受保护的(小心),但严格来说不应该是私有的。

答案 2 :(得分:2)

这些是properties。你会像这样使用它们:

Tom.Title = "Accountant";
string desc = Tom.Description;

但考虑到他们被宣布为protected,他们的知名度可能是一个问题。

答案 3 :(得分:1)

顺便说一句,在C#3.5中,您可以实例化对象的属性,如下所示:

Person TOM=new Person 
{ 
   title = "My title", ID = 1 
};

但同样,属性必须公开。

答案 4 :(得分:0)

将它们设置为公开。也就是说,只要你有“受保护”这个词,就改为“公共”这个词。如果您需要访问控制,请将其放在“get”或“set”一词的前面。

答案 5 :(得分:0)

您无法访问这些属性,因为它们被标记为protected含义:

  

只能通过同一个类或结构中的代码,或者从该类派生的类中访问类型或成员。

答案 6 :(得分:0)

我不明白这是不清楚的

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

在此示例中,类TimePeriod存储时间段。在内部,类以秒为单位存储时间,但提供了一个名为Hours的属性,允许客户端指定以小时为单位的时间。 “小时”属性的访问者执行小时和秒之间的转换。

示例

class TimePeriod
{
    private double seconds;

    public double Hours
    {
        get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}

class Program
{
    static void Main()
    {
        TimePeriod t = new TimePeriod();

        // Assigning the Hours property causes the 'set' accessor to be called.
        t.Hours = 24;

        // Evaluating the Hours property causes the 'get' accessor to be called.
        System.Console.WriteLine("Time in hours: " + t.Hours);
    }
}

属性概述

属性使类能够公开获取和设置值的公共方式,同时隐藏实现或验证代码。

get 属性访问器用于返回属性值, set 访问器用于分配新值。这些访问者可以具有不同的访问级别。

value关键字用于定义set indexer分配的值。

未实现set方法的属性是只读的。

http://msdn.microsoft.com/en-US/library/x9fsa0sw%28v=vs.80%29.aspx