具体来说,任何人都可以给我具体的例子,说明何时或何时不使用嵌套类?
我永远都知道这个功能,但从来没有理由使用它.
谢谢.
当我开始编写代码时,我是编程的初学者,我开始编写并解决问题.我在一个主函数中编写整个程序.我不知道何时上课和功能.
为了学习这些概念,我读了哪些好书?
在我的新工作中查看(成熟的)代码库,有一个接口,只有一个类实现它(据我所知).可以/我应该摆脱界面吗?
我处在一个经典的设计困境中.我正在编写一个C#数据结构来包含一个值和测量单位元组(例如7.0毫米),我想知道我是否应该使用引用类型或值类型.
结构的好处应该是减少堆操作,从而使我在表达式中获得更好的性能并减少对垃圾收集器的压力.对于像这样的简单类型,这通常是我的选择,但在这个具体案例中存在缺点.
元组是相当通用的分析结果框架的一部分,其中结果在WPF应用程序中以不同方式呈现,具体取决于结果值的类型.WPF及其所有数据模板,值转换和模板选择器都可以很好地处理这种弱类型.这意味着如果我的元组表示为结构,则该值将经历大量装箱/拆箱.实际上,在表达式中使用元组对于在拳击场景中的使用来说将是次要的.为了避免所有的拳击,我考虑将我的类型声明为一个类.关于结构的另一个担心是在WPF中可能存在双向绑定的缺陷,因为在代码中的某处而不是引用副本更容易得到元组的副本.
我也有一些方便的运算符重载.我可以使用重载的比较运算符比较毫米和毫米毫米没有问题.但是我不喜欢重载==和!=的想法,如果我的元组是一个类,因为约定是==和!=是引用类型的ReferenceEquals(与System.String不同,这是另一个经典的讨论).如果==和!=重载,有人会写if(myValue == null)并在myValue有一天结果为null时得到一个讨厌的运行时异常.
另一个方面是在C#中没有明确的方法(与例如C++不同)在代码使用中区分引用和值类型,但语义是非常不同的.我担心我的元组的用户(如果声明了struct)假定该类型是一个类,因为大多数自定义数据结构都是并且假设是引用语义.这是另一个争论,为什么人们应该更喜欢类,因为那是用户所期望的,而且没有"." /" - >"告诉他们分开.一般来说,我几乎总是会使用一个类,除非我的探查器告诉我使用一个结构,只是因为类语义最有可能是其他程序员所期望的,而C#只有模糊的提示,无论它是一个还是另一个.
所以我的问题是:
在决定是否应该重视或参考时,我还应该考虑哪些其他因素?
可以== /!=在类中重载在任何情况下都是合理的吗?
程序员假设的东西.大多数人可能会认为称为"点"的东西是值类型.如果您阅读一些带有"UnitValue"的代码,您会假设什么?
根据我的使用说明你会选择什么?
Q1.在我的大学对面向对象建模和设计的研究中,他们建议考虑对象可以为其方法做什么,以及它对其属性的责任.所有澄清的尝试都导致了进一步的混乱.
这往往会生成一个类图,其中包含具有所有操作的actor,以及仅包含数据的内部类.
这似乎不正确.还有另一种思考如何建模对象的方法吗?
Q2.此外,该课程似乎强调在真实世界对应物之后对物体进行建模,但在域模型中并不一定有意义.IE浏览器.在医疗实践中,他们有,Patient: CreateAppointment(), CancelAppointment()但不是如何实施(你会修改约会集合).还有另一种思考方式吗?
示例Q1
秘书:RecordAppointment(),RecordAppointmentCancellation()
预约:时间,日期,...(没有方法)
例Q2
医生:SeePatient()
虽然SeePatient是一个用例,但它对实际类的方法没有意义.你觉得这个怎么样?
我已经使用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++中使用'friend'?
由于缺乏关于朋友课程的文档,我来到了绊脚石.大多数书籍只是简单地解释一下,例如C++摘录:完整参考:
__PRE__
坦率地说,我从未见过有经验的C++程序员编写的任何优秀代码中的朋友类.所以,这是我的问题列表.
1- Do Inherited Classes与基类有相同的朋友吗?例如,如果我将类foo声明为类库的朋友,那么class der(派生自base)也会将foo作为朋友吗?
2- 应该使用朋友类时的特殊情况是什么?
3-我正在创建一个winapi包装器,我想让WinHandle类成为Widget类的朋友(访问一些受保护的成员).推荐吗?或者我应该使用传统的Get/Set功能访问它们?
当我第一次创建一个小型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)
这好吗?有什么建议?
当我通读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)类和数据类型之间的主要区别是什么?
这是关于Startup这里解释的课程背后的设计原理:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.1
我知道这个类需要包含像ConfigureServices或的方法Configure.
为什么CreateDefaultBuilder(args).UseStartup<Startup>()不强制要求任何基类或接口以提高可读性?
有了这种设计方法,有人必须阅读文档并了解魔术方法名称,如ConfigureServices或Configure.
如果这是新的类设计思维模式的一部分,那么我在哪里可以阅读更多关于它的内容?
class-design ×10
c# ×5
class ×2
oop ×2
uml ×2
analysis ×1
asp.net-core ×1
boxing ×1
c++ ×1
friend ×1
function ×1
interface ×1
modeling ×1
nested ×1
nested-class ×1
refactoring ×1
try-catch ×1