Tag: oop

无法修改返回值,因为它不是变量

我有一个名为BaseRobot的类: var robot2 = new BaseRobot(0, 0, 0); private Point mHome; public Point Home { get { return mHome; } } 这就是创建原始住宅的地方,我想在program.cs创建一个新住宅。 我有以下代码,但它不起作用,它提出错误说 无法修改返回值,因为它不是变量。 码: robot2.Home.X = 1 robot2.Home.Y = 5; { Console.WriteLine(“===New robot at specified home position===”); StringBuilder ab = new StringBuilder(); ab.AppendFormat(“Robot#2 has home at .\r\n “, robot2.Home.X, robot2.Home.Y); ab.AppendFormat(“It is facing {0} […]

实例方法是否在每个对象的内存中重复?

为了更清楚我的问题,如果你创建一个特定类的数组:例如, ExampleClass[] test = new ExampleClass[5]; 我知道五个ExampleClass实例会为每个类创建每个变量的副本,但是在内存中重复5次的方法/函数,还是每个测试只指向同一个单类代码库? 如果它为每个类重复,那只会浪费内存。

为什么List = List ?

为什么以下代码不起作用? class parent {} class kid:parent {} List parents=new List; 这对我来说似乎很明显。 这里发生了什么?

字段xxx永远不会分配给,并且始终将其默认值设置为null

谁知道这个问题是什么? 我得到了这个警告, 字段xxx从未被分配给,并且在private static Quantizer quantit ; 上将始终具有其默认值null private static Quantizer quantit ; 我不知道该怎么做才能修复,因为当我尝试使用quantit.Quantize()调试说: “对象引用未设置为对象的实例。” 并指向au = quantit.Quantize(); 代码: public class Quantization : System.Windows.Forms.Form { private static Quantizer quantit; private Button btnLoad; private PictureBox imgPhoto; public Quantization() { btnLoad = new Button(); btnLoad.Text = “&Load”; btnLoad.Left = 10; btnLoad.Top = 10; btnLoad.Click += new System.EventHandler(this.OnLoadClick); […]

Reflection是否打破了封装原则?

好吧,假设我们有一个类定义的类 public class TestClass { private string MyPrivateProperty { get; set; } // This is for testing purposes public string GetMyProperty() { return MyPrivateProperty; } } 然后我们尝试: TestClass t = new TestClass { MyPrivateProperty = “test” }; 编译失败, TestClass.MyPrivateProperty is inaccessible due to its protection level ,正如预期的那样。 尝试 TestClass t = new TestClass(); t.MyPrivateProperty = […]

我们可以使用对象访问私有变量吗?

我们无法从在类外部创建的对象访问类的私有变量,但是当在类内部创建相同的对象时,可以访问它本身。 为什么?? class Program { private int i; public void method1() { Program p = new Program(); pi = 5; // OK when accessed within the class } } class AnotherClass { void method2() { Program p = new Program(); pi = 5; //error because private variables cannot be accessed with an object which is […]

我应该如何建模我的代码以在这种特定情况下最大化代码重用?

更新:请参阅问题的结尾,了解我如何实施解决方案。 对于措辞不好的问题,我很抱歉,但我不确定如何最好地提出这个问题。 我不确定如何设计一个可以重复使用的解决方案,其中大多数代码在每次实现时都完全相同,但实现的一部分每次都会改变,但遵循类似的模式。 我试图避免复制和粘贴代码。 我们有一个内部数据消息系统,用于在不同机器上跨数据库更新表。 我们正在扩展我们的消息服务以向外部供应商发送数据,我想编写一个简单的解决方案,如果我们决定向多个供应商发送数据,可以重复使用。 代码将被编译为EXE并定期运行以将消息发送到供应商的数据服务。 以下是代码的大致概述: public class OutboxManager { private List _OutboxMsgs; public void DistributeOutboxMessages() { try { RetrieveMessages(); SendMessagesToVendor(); MarkMessagesAsProcessed(); } catch Exception ex { LogErrorMessageInDb(ex); } } private void RetrieveMessages() { //retrieve messages from the database; poplate _OutboxMsgs. //This code stays the same in each implementation. } private void SendMessagesToVendor() […]

深层嵌套字典是反模式吗?

我有一个结构可以使用三深嵌套字典很容易地表示,就像这样 private static Dictionary<string, Dictionary<string, Dictionary>> PrerenderedTemplates; 结构可能会像这样使用 PrerenderedTemplates[instanceID][templategroup][templatepart] 现在,我意识到这段代码很难阅读,因为通过查看定义语句,你无法分辨出它的用途。 我可以在将其更改为Dictionary看到的唯一优势是可读性。 将每个嵌套转换为自己的类(例如, class PrerenderedTemplate{} class TemplateGroup{} class TemplatePart{} )将为很少(如果有)计算优势添加更多代码行。 据我所知。 那么,我的方法是“好的”还是我应该加倍努力并创建单独的课程? 是否可以覆盖嵌套Dictionary在文档/注释中的工作方式 是否有处理这种嵌套的最佳实践? 请记住,这是一个私人成员,对于使用该类的人来说,它不需要直截了当。 更新 所以,受Reza的启发,但无法使用Tuples,我决定创建自己的密钥生成器并实现他的模式: private Dictionary PrerenderedTemplates; private string GetPrerenderedTemplateKey(string InstanceId, string FeatureId, string OptionId) { return new StringBuilder(instanceId) .Append(FormatTools.LIST_ENTRY_DELIMITER) .Append(templategroup) .Append(FormatTools.LIST_ENTRY_DELIMITER) .Append(templatepart).ToString(); } 其中FormatTools.LIST_ENTRY_DELIMITER是Unicode专用字符0xe04d 。

为什么IsNan是Double类的静态方法而不是实例属性?

问题在标题中,为什么: return double.IsNaN(0.6d) && double.IsNaN(x); 代替 return (0.6d).IsNaN && x.IsNaN; 我问,因为当实现具有与NaN相同含义的特殊值的自定义结构时,我倾向于选择第二个。 此外,该属性的性能通常更好,因为它避免复制堆栈上的结构以调用IsNaN静态方法(并且因为我的属性不是虚拟的,所以没有自动装箱的风险)。 当然,对于内置类型来说这不是一个真正的问题,因为JIT可以很容易地优化它。 我现在最好的猜测是,因为你不能在double类中同时拥有属性和静态方法,所以他们更喜欢java启发的语法。 (实际上你可以同时定义一个get_IsNaN属性getter,另一个定义一个IsNaN静态方法,但它会混淆任何支持属性语法的.Net语言)

抽象基类强制每个派生类为Singleton

如何创建一个抽象类来强制每个派生类为Singleton? 我用C#。