不是一个属性,不是一个方法.定型?<
<
?
我正在对现有系统进行逆向建模,所以我需要清楚地反映出这与readonly字段或方法对不同(不管IL说的是什么),所以我想我会选择刻板印象,但我会接受语言独立的get_set_作为一般解决方案.谢谢大家的理智测试.
我通常在Visio中准备我的UML图表(我知道,我知道;但是你要做什么?).
在绘制属性时,它们最终如此:
+------------------------+ | MyClass | |------------------------| | - _foo : int | |------------------------| | «property» + Foo : int | +------------------------+
«property»是源自«operator»的自定义构造型.
丑陋,我知道.但它很有效,而且很明显.我以相同的方式构建构造函数.
属性是写作只是一种方便的方法get_MyValue()
和set_MyValue(value)
允许转让,而不是正常的方法调用(使用括号).
您访问的实际上是一个.NET属性,C#有自己的语法来访问它们.由于在皮肤下创建了真实get_
和set_
方法,因此您可以简单地显示这些方法(使您的UML语言独立 - 例如,使您的UML同样适用于VB.NET开发人员)
......或者如你所说,介绍你自己的刻板印象!
您可以使用与字段相同的方式表示属性.要指定readonly或writeonly等附加信息,您可以使用
+名称:字符串{READONLY}
我一直在属性名称旁边使用<
和<
构造型,因此它们看起来像字段,但允许您区分get
或的访问修饰符set
:
+=============================+ | ClassName | +-----------------------------+ | +<> Id : int | | -< > Id : int | | +< > IsSomething : bool | +-----------------------------+ | + Method1(arg1 : string) | +=============================+
或者,如果您不希望出现一个以上的属性,那么这也可以工作:
+=============================+ | ClassName | +-----------------------------+ | +<> -< > Id : int |
并且为了减少混乱,如果get
和set
具有相同的访问修饰符:
+====================================+ | ClassName | +------------------------------------+ | +<> Description : string | | +< > -< > Id : int |
这清楚地传达了属性是具有get还是set,以及属性是否为只读(通过<
类图中不存在的属性)。所以基本上您在问题中说的是。
尽管属性是getter和setter方法的语法糖,但它们应该感觉像字段,并且我相信UML图应该反映这一事实,同时还传达什么是公共的,什么是私有的,以及setter是否存在与否。