C# 通过调用关联的属性而不是数据成员本身,从ctor内部初始化私有数据成员是一种好的做法吗?

C# 通过调用关联的属性而不是数据成员本身,从ctor内部初始化私有数据成员是一种好的做法吗?,c#,properties,C#,Properties,一般来说,最好尽可能使用属性getter和setter,除非有特定的理由不这样做。如果属性设置器有一个副作用,比如在特定情况下不希望触发通知,那么可以直接从对象内部分配给backing字段,但要尽量避免陷入这种情况 使用属性getter和setter是很好的,即使在实现类本身中也是如此:当/如果您将来需要更改getter/setter的实现,例如添加所需的副作用,那么您的代码将能够很好地遵循新的getter/setter语义,最好尽可能使用属性getter和setter,除非有特定的理由不这样做

一般来说,最好尽可能使用属性getter和setter,除非有特定的理由不这样做。如果属性设置器有一个副作用,比如在特定情况下不希望触发通知,那么可以直接从对象内部分配给backing字段,但要尽量避免陷入这种情况


使用属性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; }
    }
}