Tag: 类设计

UML类图:这是如何编写抽象方法和属性的?

当我第一次创建一个小型C#项目的uml类图时,我遇到了一些属性问题。 最后,我在开始时将属性添加为带有<>的变量。 现在我想知道如何用抽象方法解决这个问题? 我应该将<>添加到方法中吗? 我做这样的事情: ———————————– | <> | | MyClass | ———————————– |<> + a : int | |<> + b : string | ———————————– |<> # Job() : void | |<> # Job2() : string | |- SomeNonAbstractMethod() : void | ———————————– 这好吗? 有什么建议?

对于需要引用其他类的类,C#中的优秀设计模式是什么?

我正在研究C#.NET中的业务问题。 我有两个名为C和W的类,它们将在不同的时间独立实例化。 类C的对象需要包含对类W的0 … n个对象的引用,即C对象最多可包含n个W对象。 每个W对象需要包含对C类的1个对象的引用,即W对象包含在一个C对象中。 通常首先实例化C类的对象。 稍后,将发现并实例化其W内容。 在此之后,我需要将C和W对象相互交叉引用。 这有什么好的设计模式? 我实际上有一些案例,我有三个或四个类,但我们可以谈论两个类,以保持简单。 我在考虑一些简单的事情: class C { public List contentsW; } class W { public C containerC; } 这将暂时起作用,但我可以预见必须编写相当数量的代码来跟踪所有引用及其有效性。 我想在后面实现代码,只对容器进行浅刷新,并对所有引用类进行深度刷新。 还有其他方法,它们有什么优势? 编辑11/3:感谢所有人的好答案和良好的讨论。 我最终选择了jop的答案,因为它最接近我想要的,但其他答案也有帮助。 再次感谢!

在C#中,标记类静态的目的是什么?

在C#中,标记类静态的目的是什么? 如果我有一个只有静态方法的类,我可以将该类标记为静态。 为什么我要将类标记为静态? 如果所有方法都是静态的,并且我打算永远不会添加非静态方法,我是否不想将类标记为静态? 我环顾四周,看到了一些类似的问题,但没有一个像这样。

如何在C#静态和非静态方法之间做出决定?

[编辑] 我的原始问题是“为什么要在静态和非静态之间做出决定?两者都是一样的……” 不幸的是,它被编辑成一个C#特定的问题,我真的想避免。 所以,让我做一些补充: 当我说接口时,我不是指C#-keyword接口,而是我理解的东西,比如C ++接口:一组定义良好的函数来操作我的对象。 当说削弱我的界面时,我的意思是我有不同的function(静态/非静态)做同样的事情。 当有不同的function来做同样的事情时,我的界面不再明确定义。 所以,正如看门人Bob发布的那样,我可以实现一个Validate()函数 Document.Validate(myDocumentObject); 但是也 myConcreteDocumentObject.Validate(); 要回到我的Copy() – 示例,可以实现Copy()之类的 myConcreteDocument.Copy(toPath); 但是也 Document.Copy(myConcreteDocumentObject, toPath) 要么 Document.Copy(fromPath, toPath) 当我想到一个包含属于我的Document的所有文件的文件夹时(在这种情况下,我不依赖于具体的实例 – 但我依赖于其他东西:))。 一般来说,我说的是静态方法而不是静态类(对不起,如果我忘了扩展)。 但正如Anton Gogolev所说,我认为我的文档课不是一个很好的例子而且没有很好的设计,所以我想我必须看看单一责任原则。 我还可以实现某种与DocumentClass一起运行的ManagerClass: 例如: myDocumentManagerObject.Copy(myConcreteDocumentObject, toPath); 要么 myDocumentManagerObject.Copy(myConcreteDocumentObject, toPath); 但是,如果我参考方法1)我倾向于创建自己执行任务的对象,而不是使用我的DocumentObject执行某些操作的其他对象(DocumentManager)。 (我希望这不会采取关于OOP的宗教讨论的方向;)。) [/编辑] 旧版: 起初这似乎是一个非常基本的问题,比如“何时使用静态方法,何时不使用”,但这是我偶尔遇到的问题(我很难描述真正的问题是什么;也许只是为了得到原因(不)使用1)或为什么(不)使用2))。 (虽然我使用的是C#-Syntax,但这不是C#限制的问题) 在OOP中,有两种处理对象的方法(以及其他方法): 1)如果我想要我的对象做某事,我只是告诉他这样做: myConcreteObject.DoSomething(); 这就像和一个对象交谈一样。 2)或者如果你是静态方法的粉丝: ObjectClass.JustDoIt(); 在某种程度上,我认为静态函数只是“感觉”更好。 所以我倾向于经常使用静态方法(独立于具体实例 – 独立总是好事)。 因此,在设计课程时,我经常要决定是采用方法1)还是采用方法2): 想象一下,你有一个“文档”类,它应该代表一个应该保存到数据库中的文档: 一个文件 由一个或多个来自文件系统的图像文件组成(这些文件成为单个文档页面) […]

C#类可以有多少种方法

C#类可以拥有的属性数量是否有限制? 我快速浏览标准ECMA-334并没有找到任何相关信息。 在进入为什么一个有很多方法的课程设计不好之前,我想更明确一下这个意图。 当然,我不会手动编写一个包含大量方法的类。 我问这个的原因是我需要通过代码生成大量的执行单元。 我讨论的是具有单个方法的多个类或具有多个方法的一个大类。 所以对于这个问题,我只是有兴趣,如果有一个限制,属性数量,方法的限制是什么。

创建自定义exception还是使用内置exception?

目前,我正在编写一个客户端类,在其他喜欢抛出exception的类中使用DNS,套接字和SSL。 其他人将实现这个类,所以我想知道抛出exception的最佳做法是什么。 我应该创建自己的自定义exception,以便他们知道这是我的类抛出exception,还是应该允许我调用的类和方法(DNS,套接字等)抛出自己的exception? 目前,代码是数百行,并且随着许多不同的方法调用而增长。 在这种情况下抛出exception的最佳做法是什么?