Tag: oop

为什么Java和C#在oops方面有所不同?

1)为什么以下代码不同。 C#: class Base { public void foo() { System.Console.WriteLine(“base”); } } class Derived : Base { static void Main(string[] args) { Base b = new Base(); b.foo(); b = new Derived(); b.foo(); } public new void foo() { System.Console.WriteLine(“derived”); } } Java的: class Base { public void foo() { System.out.println(“Base”); } } class Derived […]

集合类型属性的setter

集合类型属性是否必需的setter //Type 1 class Company { private IList customers; public IList Customers { get { return customers; } set { customers = value; } } } //Type 2 class Company { private readonly IList customers = new List(); public IList Customers { get { return customers; } } } 我什么时候使用Type 1和Type 2? 如果我初始化List并使用readonly属性Customers,那还不够吗? 如在Company.Customers.Add(new Customer) […]

建模“我是*但我也是**”

在[ 这篇文章 ]中,我正在努力实现状态模式,正如@jonp建议的那样。 我不太明白如何使用他发布的内容,但这导致我想到我可能正在尝试将方形钉固定在圆孔中。 所以我的问题: 如果我的网站访问者可以扮演多个角色,即User可以是Vendor , Employer , Advertiser ,或者以上所有,我应该使用inheritance吗? 我宣布: class Vendor : User {} class Advertiser : User {} 等等,但是当用户既是供应商又是雇主时,不同类的实例确实指向相同的底层对象…我不确定这是否可行。 我该如何建模? *更新* 谢谢大家(你们都得到了一点(这是我能给予的))。 过去几天,我一直在用EF,向下转换和状态模式将我的头发拉出来。 角色方法更有意义。

每个用户定义的类是否需要实现IDisposable接口以获取垃圾

我不确定用户定义的类对象是如何被垃圾收集的。 我是否需要在每个类上实现IDisposable接口并调用dispose()方法来释放内存?

值类型如何实现ref类型

我遇到了一个值类型正在实现ref的scenerio。 类型。 只是想知道怎么可能(幕后的是什么?) struct是一个值类型,接口是ref。 类型但结构可以实现接口没有任何错误… 有什么想法吗? 提前致谢

在覆盖C#for ASP.NET中的方法时,我应该调用基类实现吗?

我理解重写一个方法/函数从它在基类中的实现重新定义它在派生类中的实现。 现在令我困惑的是,如果我覆盖ASP.NET中的一个类,比如CreateChildControls() (我没有特别的原因随机选择它),VS2008自动生成: protected override void CreateChildControls() { base.CreateChildControls(); } 足够好,默认实现只调用基类’ CreateChildControls() 。 所以,如果我想运行一些代码,因为我不知道base.CreateChildControls()如何,我应该这样做: protected override void CreateChildControls() { /*My Code Here*/ base.CreateChildControls(); } 或者,完全忽略base.CreateChildControls() protected override void CreateChildControls() { /*My Code Here*/ }

为什么.NET中没有IDateTimeProvider而DateTime现在有getter?

目前我正在为一个进行日期时间特定validation的组件编写unit testing。 我创建了IDateTimeProvider接口,它充当DateTime.UtcNow包装器,业务对象直接使用接口而不是DateTime 。 看起来DateTime有点过载,应该分成一个值和一个从操作系统中获取该值的东西。 我想知道在.NET中是否有特殊原因没有IDateTimeProvider ( IClock )接口?

适当使用静态方法

从概念上讲,当方法只接受输入并将输入重新格式化为输出时,使用静态方法(C#)是否合适? 例如: public static string FormatString(string inputString){ return “some formatting” + inputString + “Some other formatting”; } 如果我有一些这样的方法,静态的“实用”类是一个好主意吗?

OOP中的默认参数是不好的做法吗?

方法的默认参数是否违反封装? 不在C#中提供默认参数的理由是什么?

如何防止某些方法的inheritance?

如何防止派生类中某些方法或属性的inheritance?! public class BaseClass : Collection { //Some operations… //Should not let derived classes inherit ‘Add’ method. } public class DerivedClass : BaseClass { public void DoSomething(int Item) { this.Add(Item); // Error: No such method should exist… } }