标签: class-design

你想什么时候在C#中嵌套类?

具体来说,任何人都可以给我具体的例子,说明何时或何时不使用嵌套类?

我永远都知道这个功能,但从来没有理由使用它.

谢谢.

c# class-design nested class nested-class

9
推荐指数
2
解决办法
972
查看次数

何时制作课程和功能

当我开始编写代码时,我是编程的初学者,我开始编写并解决问题.我在一个主函数中编写整个程序.我不知道何时上课和功能.

为了学习这些概念,我读了哪些好书?

programming-languages class-design function

9
推荐指数
2
解决办法
5624
查看次数

如果只有一个类实现它,那么接口是否有任何意义?

在我的新工作中查看(成熟的)代码库,有一个接口,只有一个类实现它(据我所知).可以/我应该摆脱界面吗?

refactoring class-design interface

9
推荐指数
2
解决办法
298
查看次数

我应该使用struct还是class?

我处在一个经典的设计困境中.我正在编写一个C#数据结构来包含一个值和测量单位元组(例如7.0毫米),我想知道我是否应该使用引用类型或值类型.

结构的好处应该是减少堆操作,从而使我在表达式中获得更好的性能并减少对垃圾收集器的压力.对于像这样的简单类型,这通常是我的选择,但在这个具体案例中存在缺点.

元组是相当通用的分析结果框架的一部分,其中结果在WPF应用程序中以不同方式呈现,具体取决于结果值的类型.WPF及其所有数据模板,值转换和模板选择器都可以很好地处理这种弱类型.这意味着如果我的元组表示为结构,则该值将经历大量装箱/拆箱.实际上,在表达式中使用元组对于在拳击场景中的使用来说将是次要的.为了避免所有的拳击,我考虑将我的类型声明为一个类.关于结构的另一个担心是在WPF中可能存在双向绑定的缺陷,因为在代码中的某处而不是引用副本更容易得到元组的副本.

我也有一些方便的运算符重载.我可以使用重载的比较运算符比较毫米和毫米毫米没有问题.但是我不喜欢重载==和!=的想法,如果我的元组是一个类,因为约定是==和!=是引用类型的ReferenceEquals(与System.String不同,这是另一个经典的讨论).如果==和!=重载,有人会写if(myValue == null)并在myValue有一天结果为null时得到一个讨厌的运行时异常.

另一个方面是在C#中没有明确的方法(与例如C++不同)在代码使用中区分引用和值类型,但语义是非常不同的.我担心我的元组的用户(如果声明了struct)假定该类型是一个类,因为大多数自定义数据结构都是并且假设是引用语义.这是另一个争论,为什么人们应该更喜欢类,因为那是用户所期望的,而且没有"." /" - >"告诉他们分开.一般来说,我几乎总是会使用一个类,除非我的探查器告诉我使用一个结构,只是因为类语义最有可能是其他程序员所期望的,而C#只有模糊的提示,无论它是一个还是另一个.

所以我的问题是:

在决定是否应该重视或参考时,我还应该考虑哪些其他因素?

可以== /!=在类中重载在任何情况下都是合理的吗?

程序员假设的东西.大多数人可能会认为称为"点"的东西是值类型.如果您阅读一些带有"UnitValue"的代码,您会假设什么?

根据我的使用说明你会选择什么?

c# boxing class-design

9
推荐指数
1
解决办法
1357
查看次数

面向对象设计中的方法

Q1.在我的大学对面向对象建模和设计的研究中,他们建议考虑对象可以为其方法做什么,以及它对其属性的责任.所有澄清的尝试都导致了进一步的混乱.

这往往会生成一个类图,其中包含具有所有操作的actor,以及仅包含数据的内部类.

这似乎不正确.还有另一种思考如何建模对象的方法吗?

Q2.此外,该课程似乎强调在真实世界对应物之后对物体进行建模,但在域模型中并不一定有意义.IE浏览器.在医疗实践中,他们有,Patient: CreateAppointment(), CancelAppointment()但不是如何实施(你会修改约会集合).还有另一种思考方式吗?

示例Q1

秘书:RecordAppointment(),RecordAppointmentCancellation()

预约:时间,日期,...(没有方法)

例Q2

医生:SeePatient()

虽然SeePatient是一个用例,但它对实际类的方法没有意义.你觉得这个怎么样?

oop class-design analysis

9
推荐指数
1
解决办法
1703
查看次数

关于在何处定位Try和Catch语句的问题

我已经使用try和catch语句作为一种简单的方法来保持我的代码运行而不会崩溃(我会把所有内容都包装好).最近,我想开始更正确地使用try和catch语句.这里作为一个例子我有疑问:

public class Ninja{
    Ninja(){
    }

    public void ThrowShirikin(int numberOfShirikins){
        try{
            if(numberOfShirikins == 0){
                throw new System.ArgumentException("Invalid number of shirikins");
            }

            //Throw shirikin
        }
        catch(ArgumentException e){
            MessageBox.Show(e.Message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的Ninja类中,我的ThrowShirikin方法的全部内容都包含在try循环中.由于输入错误只有一次机会(在这种情况下,当numberOfShirikins == 0时),不仅应该检查这个代码行包含在try循环中吗?见下文:

public class Ninja{
    Ninja(){
    }

    public void ThrowShirikin(int numberOfShirikins){
        bool errorsExist = false;
        try{
            if(numberOfShirikins == 0){
                errorsExist = true;
                throw new System.ArgumentException("Invalid number of shirikins");
            }
        }
        catch(ArgumentException e){
            MessageBox.Show(e.Message);
        }

        if(!errorsExist){
            //Throw shirikin
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

^但我在这里看起来有点笨重.关于我如何理解try catch语句的使用的任何建议和意见?谢谢!

编辑:

或者我可以这样做,所以//如果numberOfShirikins的值无效,则抛出shirikin代码永远不会执行?:

public class Ninja{
    Ninja(){
    } …
Run Code Online (Sandbox Code Playgroud)

c# class-design try-catch

9
推荐指数
2
解决办法
284
查看次数

你什么时候应该使用朋友课?

可能重复:
你何时应该在C++中使用'friend'?

由于缺乏关于朋友课程的文档,我来到了绊脚石.大多数书籍只是简单地解释一下,例如C++摘录:完整参考:

__PRE__

坦率地说,我从未见过有经验的C++程序员编写的任何优秀代码中的朋友类.所以,这是我的问题列表.

1- Do Inherited Classes与基类有相同的朋友吗?例如,如果我将类foo声明为类库的朋友,那么class der(派生自base)也会将foo作为朋友吗?

2- 应该使用朋友类时的特殊情况是什么?

3-我正在创建一个winapi包装器,我想让WinHandle类成为Widget类的朋友(访问一些受保护的成员).推荐吗?或者我应该使用传统的Get/Set功能访问它们?

c++ oop class-design class friend

9
推荐指数
2
解决办法
2万
查看次数

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

当我第一次创建一个小型C#项目的uml类图时,我遇到了一些属性问题.最后,我<<property>>在开始时将属性添加为变量.现在我想知道如何用抽象方法解决这个问题?我应该加入<<abstract>>方法吗?我做这样的事情:

-----------------------------------
|           <<abstract>>          |
|             MyClass             |
-----------------------------------
|<<property>> + a : int           |
|<<property>> + b : string        |
-----------------------------------
|<<abstract>> # Job() : void      |
|<<abstract>> # Job2() : string   |
|- SomeNonAbstractMethod() : void |
-----------------------------------
Run Code Online (Sandbox Code Playgroud)

这好吗?有什么建议?

c# uml design-patterns class-design

9
推荐指数
2
解决办法
1万
查看次数

class和dataType之间有什么区别

当我通读UML规范时:

 class has a set of attributes/operations
and data type has a set of attributes/operations
Run Code Online (Sandbox Code Playgroud)

1)关于数据类型的属性/操作这意味着什么?

因为我不知道这样的数据类型如何具有属性和操作?

2)类和数据类型之间的主要区别是什么?

uml modeling class-design class-diagram

9
推荐指数
2
解决办法
7688
查看次数

为什么ASP.NET Core的Startup类不是接口或抽象类?

这是关于Startup这里解释的课程背后的设计原理:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.1

我知道这个类需要包含像ConfigureServices或的方法Configure.

为什么CreateDefaultBuilder(args).UseStartup<Startup>()不强制要求任何基类或接口以提高可读性?

有了这种设计方法,有人必须阅读文档并了解魔术方法名称,如ConfigureServicesConfigure.

如果这是新的类设计思维模式的一部分,那么我在哪里可以阅读更多关于它的内容?

c# design-patterns class-design asp.net-core

9
推荐指数
1
解决办法
812
查看次数