Tag: oop

dependency injection和AppSettings

假设我正在为我的应用程序定义一个浏览器实现类: class InternetExplorerBrowser : IBrowser { private readonly string executablePath = @”C:\Program Files\…\…\ie.exe”; …code that uses executablePath } 这可能乍一看看起来像个好主意,因为executablePath数据靠近将使用它的代码。 当我尝试在另一台具有外语操作系统的计算机上运行相同的应用executablePath会出现问题: executablePath将具有不同的值。 我可以通过AppSettings单例类(或其中一个等价物)解决这个问题但是没有人知道我的类实际上依赖于这个AppSettings类(它违背了DI ideias)。 它也可能给unit testing带来困难。 我可以通过构造函数传入executablePath来解决这两个问题: class InternetExplorerBrowser : IBrowser { private readonly string executablePath; public InternetExplorerBrowser(string executablePath) { this.executablePath = executablePath; } } 但是这会在我的Composition Root (将要执行所有需要的类连接的启动方法)中引发问题,因为那个方法必须知道如何连接并且必须知道所有这些小设置数据: class CompositionRoot { public void Run() { ClassA […]

在.NET中,一个类可以有虚拟构造函数吗?

一个类可以有虚拟构造函数吗? 如果是,为什么需要它?

如何映射两个不同对象的属性?

我想知道如何映射两个不同对象的字段并为其分配值。 Eample: public class employee { public int ID { get; set; } public string Name { get; set; } } public class manager { public int MgrId { get; set; } public string MgrName { get; set; } } 现在我有一个List对象。 我想将值分配给“manager”类。 任何自动方式来做到这一点。 我可以明确地做并为其分配值。 但我的目标是非常巨大的问题。 我也不想使用任何第三方工具。 注意:它不能为经理提供任何前缀。 它可以是任何东西。 (例如:mgrId可以像mgrCode)

在C#中实现组合和聚合?

我如何/(在C#中实现组合和聚合的最佳方法是什么?) 谢谢123Developer

在C#中构造对象的首选方法是什么? 构造函数参数或属性?

我想知道,在C#中构造新对象的首选方法是什么? 参加一个人类: public class Person { private string name; private int age; //Omitted.. } 我应该创建它来使用: New Person(“name”, 24); 要么 New Person() { Name = “name”, Age = 24 }; 这只是一个品味的问题还是有充分的理由使用一个而不是另一个? 我可以想象一个人应该只使用构造函数中的必需字段和可选字段而不是构造函数参数,而是使用属性。 我是对的吗?

为什么我需要Singleton设计模式?

我尝试学习设计模式,但真的很难理解OOD的主要思想。 我用经典方法创建了我的软件。 另一方面,我想学习OOD。 为什么我需要单身人士和其他人? 我编写了一些简单的程序:其中一个是clasical(我的风格),另一个是singleton模式。请教我为什么需要单身。 我的方法比它更好更清晰:) 我的风格:(C#) public partial class Singletonsuz : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Loadbalancer balancer = new Loadbalancer(); for (int i = 0 ; i < 15 ; i++) { string server = balancer.Server; Response.Write("Dispatch Request to: " + server); } } } class Loadbalancer { private […]

如何在c#中访问父对象

我有一个“米”级。 “米”的一个属性是另一个叫做“生产”的类。 我需要通过参考从生产类访问米级(额定功率)的属性。 在仪表实例化时不知道powerRating。 我怎样才能做到这一点 ? 提前致谢 public class Meter { private int _powerRating = 0; private Production _production; public Meter() { _production = new Production(); } }

需要引用:预处理器使用是不好的OO练习

我相信,像#if UsingNetwork这样的预处理器指令的使用是不好的OO实践 – 其他同事则不然。 我认为,当使用IoC容器(例如Spring)时,如果相应编程,可以轻松配置组件。 在这种情况下,可以通过IoC容器设置有效的IsUsingNetwork ,或者如果“使用网络”实现的行为不同,则应该实现并注入该接口的另一个实现(例如: IService , ServiceImplementation , NetworkingServiceImplementation )。 有人可以提供OO-Gurus的 引用或书籍中的参考资料 ,基本上读取“如果你尝试配置应该通过IoC容器配置的行为,预处理器使用是不好的OO实践”? 我需要这种引用来说服同事重构…… 编辑:我确实知道并同意在编译期间使用预处理程序指令更改目标平台特定代码很好,这就是预处理程序指令的用途。 但是,我认为应该使用运行时配置而不是compiletime-configuration来获得良好的设计和可测试的类和组件。 换句话说:使用#defines和#if超出它们的意图将导致难以测试代码和设计糟糕的类。 有没有人沿着这些方向阅读并能给我这样的话我可以参考?

覆盖和隐藏之间的确切区别

任何人都可以在内存和引用方面告诉覆盖和隐藏的工作。 class A { public virtual void Test1() { //Impl 1} public virtual void Test2() { //Impl 2} } class B : A { public override void Test1() { //Impl 3} public new void Test2() { Impl 4} } static Main() { A aa=new B() //This will give memory to B aa.Test1(); //What happens in […]

在值对象的不可变对象和结构之间进行选择

如何在实现值对象(作为地址的规范示例)作为不可变对象或结构之间进行选择? 选择一个是否具有性能,语义或任何其他好处?