Tag: 子类

从静态基类方法调用子类构造函数

好的……在Objective C中,您可以使用’new this()’从基类中的静态方法创建子类,因为在静态方法中,’this’指的是类,而不是实例。 当我第一次发现它并且我经常使用它时,这是一个非常酷的发现。 但是,在C#中不起作用。 该死的! 那么……任何人都知道如何在静态基类方法中“新建”子类? 这样的东西…… public class MyBaseClass{ string name; public static Object GimmeOne(string name){ // What would I replace ‘this’ with in C#? return new this(name); } public MyBaseClass(string name){ this.name = name; } } // No need to write redundant constructors public class SubClass1 : MyBaseClass{ } public class SubClass2 […]

C#覆盖/向对象添加方法/字段

我有一个为我创建和设置对象的库,然后我可以使用这些对象来做东西。 假设我给了“A”类对象“a” 所以我想覆盖该特定对象中的方法,我不想更改其类的代码,因为这需要更改库。 在Ruby中我可以使用Singleton Classes来做到这一点,例如: class FirstClass def test p “test” end end o = FirstClass.new class << o def test p "overridden" end def extraMethod p "ok" end end o.test # prints "overridden" o.extraMethod 现在我怎样才能在C#中做同样的事情? 更新 我最终没有使用我提交的答案,因为它太丑了,它需要更改基类中的所有私有字段以保护或公共以使它们存在于派生类中,因此我可以将值从base复制到派生。 我最终使用的方法是将从基类派生的Type传递给库并更改库,以便它使用以下命令创建实例: (A)Activator.CreateInstance(mytype, arguments);

当子类已经从不同的基类派生时,子类如何共享行为?

我有两个实现ISomeBehavior的类。 现在我希望他们分享function。 通常我会用一个抽象类替换ISomeBehavior,比如SomeBehaviorBase。 问题是其中一个子类已经从另一个类派生,而另一个类不是我们拥有的软件。 (这是C#,因此多重inheritance不是一种选择。)从第三方类派生的子类没有实现。 它只是派生自第三方类,并实现了ISomeBehavior,因此第三方类的处理方式与实现ISomeBehavior的其他子类相同。 我目前所做的是在ISomeBehavior上实现一个扩展方法。 现在消费代码可以调用该方法。 这种方法的问题是我想强制调用代码使用这个扩展方法。 我无法从界面中删除SomeMethod(),因为扩展方法最终必须调用它。 关于如何让两个类优雅地分享相同的行为的任何想法,当其中一个已经派生自另一个,第三方,类? 注意:策略设计模式在这里听起来很有意义,但是当子类之间的行为发生变化时会使用该模式。 这里的行为没有变化; 它只需要分享。

C#可视化子类datagridview控件VS2005

也许它是愚蠢的东西,但我在VS2005 C#中的DataGridView控件的子类有问题。 我知道我可以做几乎任何事情的子类 public class MyDataGridView : DataGridView {} 没问题,我在全球范围内提出了一些我想要适用的东西/元素。 现在,我将这个gridview放入一个包含其他控件的自定义用户控件中。 所以我有一些像视觉设计师创造的东西。 我抓住了一些按钮,标签和我的派生“MyDataGridView”。 public partial class MyCompoundDGVPlus : UserControl 所以,现在,我可以根据需要直观地绘制,移动,更改各种设置,没问题。 现在,我希望这个“MyCompoundDGVPlus”类作为其他类的基础,我将操纵特定的设置,但希望所有具有相同的外观/感觉,以及其他类似的流程,因此推导。 我甚至将“修饰符”设置设置为public,因此我应该能够在任何派生级别修改控件的任何属性。 所以,现在,我创建了一个源自“MyCompoundDGVPlus”的新“MyFirstDetailedDGVPlus”子类。 在视觉上,所有标签,按钮,datagridview都会出现。 但是,现在我想在这个类中直观地定义datagridview的列,但它是锁定的。 但是,在表格上的LABEL,我可以获得所有属性设置…. 我错过了什么

带子类参数的C#覆盖方法

我正在努力实现这样的目标 public abstract class BaseEvent { public abstract void Dispatch(IEventHandler handler); } public class MyEvent : BaseEvent { public override void Dispatch(IMyEventHandler handler) { handler.OnMyEvent(this); } } public interface IEventHandler { } public interface IMyEventHandler : IEventHandler { void OnMyEvent(MyEvent e); } 问题是编译器抱怨说MyEvent没有实现BaseEvent因为Dispatch正在使用IMyEventHandler而不是IEventHandler 。 我不想让MyEvent.Dispatch接受一个IEventHandler然后将它转换为IMyEventHandler因为我想编译时间检查以确保我没有像传递其他类型的事件处理程序那样做一些愚蠢的事情。 我找到了一个可能的解决方案(下面),但我想知道是否有更好的方法来做到这一点。 public abstract class BaseEvent where H : IEventHandler { […]

从控件中对ParentForm WndProc进行子类化

我正在将自定义的MenuStrip控件集成到另一个.NET应用程序中。 除焦点问题外,MenuStrip工作正常。 如果托管MenuStrip的表单没有聚焦,则用户需要单击两次 – 一次激活表单,另一次选择菜单项。 主机表单是单独的.NET应用程序的一部分,我无法修改。 我只能修改我的控件的源代码。 我在WinForm级别找到了一个覆盖Form WndProc方法的解决方案 ,除了我没有WinForm的源代码访问权限,我也可以重新编译主机应用程序和表单。 有没有办法对Control的ParentForm进行子类化,以便在没有聚焦的情况下自动激活ParentForm?

如何将对象“克隆”到子类对象中?

我有一个A类和一个inheritanceA类的B类A并用更多的字段扩展它。 如果有一个A类的对象,我怎样才能创建一个B类型的对象b ,它包含对象包含的所有数据? 我试过了一个a.MemberwiseClone()但只给了我另一个类型A对象。 而且我不能将A转换为B因为inheritance关系只允许相反的转换。 这样做的正确方法是什么?

如何将同一基类中的子类放入列表中?

如何将同一基类中的子类放入列表中? 我正在使用ASP.NET MVC3并创建了一个basemodel类,其中包含名称,年龄等属性。 现在我创建了更多细节的子模型(子类)。 为了轻松处理子类,我想要一个包含对象的列表但是如何? 我已经阅读过有关接口或ICollection等等但不知道什么是正确的选择以及如何开始:-(

如何使用AutoMapper将多个子类映射到一个类?

假设我有三个类是基类的子类: public class BaseClass { public string BaseName { get; set; } } public class Subclass1 : BaseClass { public string SubName1 { get; set; } } public class Subclass2 : BaseClass { public string SubName2 { get; set; } } public class Subclass3 : BaseClass { public string SubName3 { get; set; } } […]

在ASP.NET中对DropDownList进行子类化

我想在ASP.NET中inheritance内置的DropDownList,以便我可以为它添加function并在我的页面中使用它。 我尝试用UserControl做这个,但发现它没有公开内部DropDownList(逻辑上,我猜)。 我已经google了答案,但找不到任何东西。 我已经编写了实际的类,并且可以从DropDownListinheritance,但是我无法在ASP.NET页面中注册该文件并在源视图中使用它。 也许我错过了class上的一些房产? 有任何想法吗?