我对自动属性这一概念还比较陌生,但在 Microsoft 网站上看到以下说明:
在 C# 3.0 及以后的版本中,当属性访问器中不需要其他逻辑时,使用自动属性可以使属性声明更加简洁。 同时,它们还允许客户端代码创建对象。 当您声明一个属性时,编译器会创建一个私有的匿名成员变量,在属性的 get 和 set 访问器中才能访问到该成员变量。
请问:"同时,它们还允许客户端代码创建对象。" 这句话是什么意思呢?
我不太明白这句话的含义。
谢谢。
我对自动属性这一概念还比较陌生,但在 Microsoft 网站上看到以下说明:
在 C# 3.0 及以后的版本中,当属性访问器中不需要其他逻辑时,使用自动属性可以使属性声明更加简洁。 同时,它们还允许客户端代码创建对象。 当您声明一个属性时,编译器会创建一个私有的匿名成员变量,在属性的 get 和 set 访问器中才能访问到该成员变量。
请问:"同时,它们还允许客户端代码创建对象。" 这句话是什么意思呢?
我不太明白这句话的含义。
谢谢。
public class Cat
{
// Auto-implemented properties.
public int Age { get; set; }
public string Name { get; set; }
}
Cat cat = new Cat { Age = 10, Name = "Fluffy" };
Foo.x = y;
这样的语句来设置的内容都包括在内。 - Matthew Scharleynew Foo { X = 10, Y = 20 }
)与自动实现属性是完全可分离的。Foo f = new Foo { SomeCollection = { new Item(), new Item() };
。这里的 SomeCollection
属性是只读的,但返回一个可以添加元素的 List<Item>
。 - Jon SkeetICollection
,要么是任何具有公共Add
的东西,我忘记了:P)编辑变成IEnumerable
和公共Add
。 - anton.burger= { ... }
而不是= value
。 - Jon Skeet我认为他们所说的是
"它们还使客户端代码能够创建对象。"
这意味着客户端代码可以初始化一个新的引用类型对象或将值类型对象分配给自动属性,而无需创建一个私有字段来保存数据。
Oded提供了值类型的示例,因此让我们扩展他的Cat类。
private class Cat
{
// Auto-implemented properties.
public int Age { get; set; }
public string Name { get; set; }
public List<Cat> Kittens { get; set; }
}
Cat cat = new Cat { Age = 10, Name = "Fluffy" }; //borrowed fluffy for this example
cat.Kittens = new List<Cat>();
cat.Kittens.Add( new Cat() { Age = 0, Name = "Pinky" } );
cat.Kittens.Add( new Cat() { Age = 0, Name = "Blinky" } );
您可以通过访问另一个属性的值来向getter函数添加逻辑,从而自动实现属性值。
public string Status
{
get { return DeactivateDate != null ? "InActive" : "Active"; }
private set { }
}