这些是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?
答案 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