Tag: oop

创建对象的最佳方式

这似乎是非常愚蠢和基本的问题,但我试图谷歌它,但无法找到一个满意的答案, public class Person { public string Name { get; set; } public int Age { get; set; } public Person(){} public Person(string name, int age) { Name = name; Age = age; } //Other properties, methods, events… } 我的问题是,如果我有这样的课程,创建一个对象的最佳方法是什么? Person p=new Person(“abc”,15) 要么 Person p=new Person(); p.Name=”abc”; p.Age=15; 这两种方法有什么区别,创建对象的最佳方法是什么?

如何在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#中的运行时多态?

MVP和多个用户控件

我正在尝试使用MVP模式,我遇到了一个设计问题。 我正在开发一个具有多个UserControl的应用程序。 UserControls本身彼此无关,只代表实际模型的一个子集。 根据我的阅读,人们倾向于说每个视图应该使用一个Presenter。 这似乎有道理,但如果我有30个UserControls,我真的想要30个演示者吗? 另一方面,如果我有1个Presenter和1个View代表整个“应用程序”视图,那么我将拥有膨胀的View和Presenter界面。 然后每个View都必须实现与它无关的方法。 我的问题是,有没有更好的方法来处理多个UserControls,或者我应该为每个View创建一个Presenter?

从另一个类中的另一个方法访问变量

假设我在该文件中有一个ABC.CS文件,我有一个类ABC ,如下所示,方法Test() : public class ABC { public static void Test() { int a=10; int b=11; int c=12; //many many variables } } 我想在另一个文件的另一个方法的另一个方法中访问a , b …等 文件: XYZ.cs 分类: XYZ 方法: MyMethos() 。 注意 :变量可以是任何类型,如int , float和DataTable等 更新似乎人们忽略了static关键字,请举例说明 我怎样才能做到这一点 ? 谢谢。

为什么在方法结束时返回是一个好习惯

可能重复: 一个函数应该只有一个return语句吗? 一位程序员问我为什么总是在方法结束时返回? 我们都被教导在方法中只有一个return语句,而不是遍布代码的多个return语句。 有什么好理由吗?

为什么System.Windows.Forms.Control没有标记为可序列化?

我无法深度复制UserControls,因为它们未标记为可序列化。 这个设计背后的原因是什么?

如果派生类没有参数化构造函数,如何从派生类调用基类的参数化构造函数?

我有一个带有两个构造函数的基类:默认构造函数和参数化构造函数。 另一个类inheritance自该基类,它只有一个默认的构造函数。 如何从派生类中调用基类的参数化构造函数?

使用此静态类有哪些潜在问题

这是我的示例代码: public static class MySqlHelper { private static string constring = ConfigurationManager.ConnectionStrings[“MyConnString”].ConnectionString; public static int ExecuteNonQuery(string mysqlquery) { SqlConnection conn = new SqlConnection(connString); SqlCommand cmd = new SqlCommand(mysqlquery, conn); int result; try { conn.Open(); result= cmd.ExecuteNonQuery(); } finally { conn.Close(); } return result; } } 用法: MySqlHelper.ExecuteNonQuery(“select * from customers”); 我想知道使用这个静态类的问题。 我可以改变我在这里提到的课程,但我已经在几个网站上使用这个课程,我需要几天时间在每个地方更改它并测试它。 谢谢你的任何投入。 编辑:更新了代码。 这会对所提供的答案产生影响吗? […]

关键字’this’(Me)无法调用基础构造函数

在inheritance的类中,我使用基础构造函数,但我不能使用类的成员调用此基础构造函数。 在这个例子中,我有一个PicturedLabel知道它自己的颜色并有一个图像。 TypedLabel : PictureLabel知道它的类型但使用基色。 使用TypedLabel的(基础)图像应使用(基色)颜色着色,但是,我无法获得此颜色 错误:关键字“this”在当前上下文中不可用 解决方法? /// base class public class PicturedLabel : Label { PictureBox pb = new PictureBox(); public Color LabelColor; public PicturedLabel() { // initialised here in a specific way LabelColor = Color.Red; } public PicturedLabel(Image img) : base() { pb.Image = img; this.Controls.Add(pb); } } public enum LabelType { […]