当前位置:  开发笔记 > 编程语言 > 正文

C#中需要某种创作模式

如何解决《C#中需要某种创作模式》经验,为你挑选了1个好方法。

我有以下类型:

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

    public string Name
    {
        get { return this.name; }
    }
}

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

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

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

Person只能通过特定的控制器被实例化

该控制器可以随时更新Person(name字段)的状态

Person需要一个发送通知到世界其他地方发生时

所有其他类型应该只能读取 Person属性

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

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



1> JasonTrue..:

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

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

根据评论更新:

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


查看"System.ComponentModel.INotifyPropertyChanged"接口,以获取通知感兴趣方的对象属性已更改的标准方法.
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有