C# 通过调用关联的属性而不是数据成员本身,从ctor内部初始化私有数据成员是一种好的做法吗?
一般来说,最好尽可能使用属性getter和setter,除非有特定的理由不这样做。如果属性设置器有一个副作用,比如在特定情况下不希望触发通知,那么可以直接从对象内部分配给backing字段,但要尽量避免陷入这种情况C# 通过调用关联的属性而不是数据成员本身,从ctor内部初始化私有数据成员是一种好的做法吗?,c#,properties,C#,Properties,一般来说,最好尽可能使用属性getter和setter,除非有特定的理由不这样做。如果属性设置器有一个副作用,比如在特定情况下不希望触发通知,那么可以直接从对象内部分配给backing字段,但要尽量避免陷入这种情况 使用属性getter和setter是很好的,即使在实现类本身中也是如此:当/如果您将来需要更改getter/setter的实现,例如添加所需的副作用,那么您的代码将能够很好地遵循新的getter/setter语义,最好尽可能使用属性getter和setter,除非有特定的理由不这样做
使用属性getter和setter是很好的,即使在实现类本身中也是如此:当/如果您将来需要更改getter/setter的实现,例如添加所需的副作用,那么您的代码将能够很好地遵循新的getter/setter语义,最好尽可能使用属性getter和setter,除非有特定的理由不这样做。如果属性设置器有一个副作用,比如在特定情况下不希望触发通知,那么可以直接从对象内部分配给backing字段,但要尽量避免陷入这种情况
使用属性getter和setter是很好的,即使在实现类本身中也是如此:如果将来需要更改getter/setter的实现,例如添加所需的副作用,您的代码已经能够很好地支持新的getter/setter语义。因为在执行ctor时对象实例还没有完全构建,所以我确信事件(如果有)总是空的。这意味着通知永远不会触发,因为if构造总是返回false。好啊从现在起,我将始终如一地使用这个机制。谢谢你的评论。考虑很多人使用自动属性,那么这样做就可以了。因为在CoT正在进行中,对象实例还没有完全构建,我确信如果有的话,事件总是空的。这意味着通知永远不会触发,因为if构造总是返回false。好啊从现在起,我将始终如一地使用这个机制。谢谢你的评论。考虑到很多家伙使用自动属性,那么这样做就可以了。
interface IAnimal
{
string Name { get; set; }
}
class Dog : IAnimal
{
private string name;
public Dog(string name)
{
Name = name;
}
public string Name
{
get { return name; }
set { name = value; }
}
}