C#中需要某种创作模式

Rom*_*ier 4 .net c# design-patterns

我有以下类型:

// incomplete class definition
public class Person
{
    private string name;

    public string Name
    {
        get { return this.name; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望使用某种专用控制器/构建器创建更新此类型,但我希望它对其他类型保持只读.

每次由控制器/构建器更新事件时,此对象还需要触发事件.

总结一下,根据以前的类型定义骨架:

  • Person只能通过特定的控制器被实例化
  • 该控制器可以随时更新Person(name字段)的状态
  • Person需要一个发送通知到世界其他地方发生时
  • 所有其他类型应该只能读取 Person属性

我该如何实现呢?我在这里谈论的是控制器/构建器,但欢迎所有其他解决方案.

注意:我可以依赖internal修饰符,但理想情况下我的所有东西都应该在同一个程序集中.

Jas*_*rue 5

创建一个IReadOnlyPerson接口,它只公开get访问器.让人实施IReadOnlyPerson.将对Person的引用存储在控制器中.仅为其他客户端提供只读版本.

与大多数OO功能一样,这可以防止错误,但不能防止欺诈.如果客户碰巧知道(或怀疑)IReadOnlyPerson是由Person实现的,那么客户端可以运行时转换为Person.

根据评论更新:

Read Only接口也可以公开事件委托,就像任何其他对象一样.通常在C#中使用的习惯用法不会阻止客户端搞乱侦听器列表,但约定只是添加侦听器,因此这应该是足够的.在具有状态改变副作用的任何set访问器或函数内部,只需调用具有null(无侦听器)情况的保护的事件委托.

  • 查看"System.ComponentModel.INotifyPropertyChanged"接口,以获取通知感兴趣方的对象属性已更改的标准方法. (2认同)