Tag: oop

C#hack:接口和抽象类之间的低级别差异

这是一个关于C#基础知识的哲学问题:我想知道完全抽象类可以模拟接口的接近程度。 假设我们有以下界面: public interface INativeInterface { void PerformAction(); String Property { get; set; } } 以及抽象类: public abstract class ISimulatedInterface { public abstract void PerformAction(); public abstract String Property { get; set; } } 他们有很多共同点,不是吗? 我所知道的差异是: 多重inheritance不适用于抽象类 显式实现不适用于抽象类 使用reflection或类似的东西可以跳过这些限制吗? 我意识到接口和抽象类在root中是不同的:接口声明了“ 可以表现得像 ”的条件,抽象类 – “ 是一种 ”,但即使这似乎是如此接近以至于这些实体之间的低级别差异要讨论的。 这个问题甚至可以听起来像“你会用C ++创建一个接口”。

如何将ListItemCollection(dropdownlist.items)转换为字典?

如何将ListItemCollection ( DropDownList.items )转换为Dictionary (我知道它可以通过每个循环完成)是否还有其他方式linq?

命名空间内的私有类

可能重复: 命名空间只有C#/ .NET中的类可见性? 我想要的是拥有一个只能在同一命名空间内的其他类访问的类,而不必将命名空间放在它自己的程序集中。 有没有理由在C#中这是不可能的? 编辑 :我已经改变了一点问题,因为编译器告诉我不允许private 。 谁能告诉我这个的原因?

如何为实现接口的类型要求没有参数的构造函数?

有办法吗? 我需要实现特定接口的所有类型都有一个无参数构造函数,可以这样做吗? 我正在为我公司的其他开发人员开发基本代码,以便在特定项目中使用。 有一个进程将创建执行某些任务的类型(在不同的线程中)的实例,我需要这些类型遵循特定的合同(ergo,接口)。 界面将在程序集内部 如果您对没有接口的情况有建议,我很乐意将其考虑在内……

如何访问generics类型的静态方法

public class BusinessObjects where O : BusinessObject { void SomeMethod() { var s = O.MyStaticMethod(); // <- How to do this? } } public class BusinessObject { public static string MyStaticMethod() { return "blah"; } } 是否有正确的面向对象的方法来实现这一点,还是我需要求助于反思? 编辑:我试图过于简单化这个问题,并且遗漏了一个重点。 MyStaticMethod使用reflection并需要派生类型来返回正确的结果。 但是,我刚刚意识到我设计中的另一个缺陷是我无法使用静态虚拟方法,我认为这就是我需要的。 看起来我需要找到另一种解决这个问题的方法。

事件参数; “发件人为对象”,或“发件人为T”?

当我为业务对象编写公共事件时,除了附加的特定参数之外,我还习惯于将实例作为“ sender as Object ”传递。 我现在问自己为什么不指定课程 ? 所以对你有更多的经验; 您是否曾在事件中将不同的类作为发送者传递 ? 如果是这样,那么当你可以/不好的时候,你的决定标准是什么?

Web方法可以重载吗?

我已经构建了一个常规的.NET asmx服务。 如何在此服务中重载Web方法?

Winforms应用程序设计

考虑您在一个项目中使用winform应用程序,在其他项目中使用业务逻辑。 UI工作人员的项目参考了业务逻辑项目。 在主winform的构建过程中,逻辑单元的实例的分配应该是gui背后的大脑并且位于业务逻辑项目中。 对它的引用保存在Main Winform中。 假设我对gui有更新,我可以通过业务逻辑实例级别调用的方法的返回值来获取它。 这是一个糟糕的设计,你会如何改进它?(例子将不胜感激)

如何仅在inheritance中调用子类构造函数

是否有可能在c#中inheritance,以便我们可以只调用子类构造函数而不调用基类构造函数作为默认基类构造函数调用

inheritance与事件

我有一个如此定义的接口: public interface IRipper { IRipperHost Host { get; set; } void Rip(FileStream stream); event RipperEventHandler OnStart; event RipperEventHandler OnComplete; event RipperEventHandler OnProgressChanged; } public delegate void RipperEventHandler(object sender, RipperEventArgs e); 以及实现该接口的基类 public class RipperBase : IRipper { public void Rip(FileStream stream) { throw new System.NotImplementedException(); } public event RipperEventHandler PostRipEvent; event RipperEventHandler IRipper.OnComplete { […]