Tag: inheritance

Delegate不接受子类?

我的代表似乎不接受一个子类,我认为一个例子是最简单的。 public class A { public A() { } } public class B : A { public B() { } } public class Program { private delegate void CallBack(A a); private static CallBack callBack = new CallBack(Test); public Main(string[] args) { callBack(new B()); } private static void Test(A a) { Console.WriteLine(“Test()”); } // Compilation error […]

接口基类通过generics方法实例化

我有一个界面,例如,为此看起来像这样: interface IFoo where TEnum : struct, IConvertible, IComparable, IFormattable { TEnum MyEnum { get; set; } } 然后我有一个抽象的基类,如下所示: abstract class FooBase : IFoo where TEnum : struct, IConvertible, IFormattable, IComparable { public TEnum MyEnum { get; set; } } 然后我inheritance基类,如下所示: class MyFoo : FooBase { public enum MyFooEnum { Foo1, Foo2, } } 如何从类型参数FooBase的generics方法实例化FooBase […]

如何从基类的实例创建派生类的实例并包含私有字段?

我的问题与这个问题有关,但有点具体。 我有一个域对象Customer ,如下所示: public class Customer : Party { public Identity Identity {get; protected set;} public bool IsOrganization {get; set;} } 和身份看起来像这样: public class Identity : PersistableModel { public string FirstName { get; set; } public string LastName { get; set; } public string MiddleInitial { get; set; } public string Title { get; set; […]

以基本forms定义的自定义属性在重建时会以inheritance的forms丢失其状态

我在使用基本forms的属性时遇到问题,而这些属性没有以inheritance的forms维护状态。 环境: Visual Studio 2010 Ultimate Service Pack 1:版本10.0.40219.1 SP1Rel .Net Framework:版本4.0.30319 SP1Rel Windows 7旗舰版 下面是重现的源代码和步骤: using System; using System.ComponentModel; using System.Windows.Forms; namespace Test { public partial class BaseForm : Form { [DefaultValueAttribute(true)] public bool ControlVisible { get { return this.checkBox1.Visible; } set { this.checkBox1.Visible = value; } } [DefaultValueAttribute(false)] public bool ControlChecked { get […]

有没有办法让构造函数只对C#中的父类可见?

我有一个inheritance自我创建的抽象类的类的集合。 我想使用抽象类作为工厂来创建抽象类的具体实现的实例。 有没有办法隐藏除父类之外的所有代码的构造函数。 我想基本上这样做 public abstract class AbstractClass { public static AbstractClass MakeAbstractClass(string args) { if (args == “a”) return new ConcreteClassA(); if (args == “b”) return new ConcreteClassB(); } } public class ConcreteClassA : AbstractClass { } public class ConcreteClassB : AbstractClass { } 但我想阻止任何人直接实例化2个具体的类。 我想确保只有MakeAbstractClass()方法可以实例化基类。 有没有办法做到这一点? UPDATE 我不需要从Abstract类外部访问ConcreteClassA或B的任何特定方法。 我只需要Abstract类提供的公共方法。 我真的不需要阻止Concrete类被实例化,我只是试图避免它,因为它们不提供新的公共接口,只是抽象类内部的一些非常具体的事物的不同实现。 对我来说,最简单的解决方案是将子类作为samjudson提到 。 我想避免这种情况,因为它会使我的抽象类’文件比我想要的要大很多。 […]

没有多重inheritance且没有代码重复的多重inheritance

我有一个关于如何在不允许多重inheritance的语言中处理以下场景的理论问题。 想象一下,我有一个基类Foo ,从中我希望创建三个子类: Class BarinheritanceFoo并实现function“A” Baz类inheritanceFoo并实现function“B” 类QuxinheritanceFoo并实现function“A”和“B” 想象一下,实现function“A”和“B”的代码总是相同的。 有没有办法只为“A”和“B”编写一次代码,然后将相应的类应用(或“inheritance”)它?

从c#中inheritance结构的梦想

在那里,我正在使用C#XNA 4.0进行2D游戏,并再次遇到我的小烦恼; 矩形 。 对于那些使用基本碰撞的人来说,这几乎是必需的。 对于几乎所有创建的游戏对象,您需要有一个矩形。 然后我去改变X,检查碰撞或其他任何东西。 在那里,我开始了objectName.Rectangle.Whatever的永无止境的战斗。 为了解决这个问题,我当然会给出一些objectName属性/方法来为我访问这些属性/方法。 然后我敢于梦想。 我有一个伟大的设计来制作一个基本的游戏对象类,所有drawable将inheritance,这将允许父母,精确的本地坐标(浮点数),并保持纹理/ spritebatch。 为了完成这个,我准备从Rectangleinheritance,使用它所拥有的所有方法和属性。 哎呀,每当需要一个Rectangle的东西时,我可能会懒得说objectName,而不是objectName.Rectangle。 然后我意识到,不是机会。 我开始感到沮丧,因为我很聪明的想法被砸碎了。 从那以后,我完美的小class级拥有一个矩形,各种方法和属性根据需要访问它。 我也有机会从XNA DrawableGameComponentinheritance它。 虽然从长远来看这更实用,每次我查看绘制或更新方法并看到我经常想到的矩形调用时,是否有希望做我想要的事情? 我可以做一些聪明的工作吗? 或者是从一个真正被我掌握的矩形inheritance而来? 虽然使用XNA中提供的DrawableGameComponent类允许大多数与游戏对象相关的操作发生在类Update()方法中,但每次在类之外我都需要引用而不是Rectangle的属性,而是Rectangle本身,我稍微考虑到实际上我的对象实际上是各种方式,并且加强了Rectangle。 然后我再一次发现自己在问: 有没有办法从预定义的结构inheritance,或者给项目留下你的印象(一种解决方法)?

强制使用接口而不是声明中的具体实现(.NET)

在C ++中,您可以执行以下操作: class base_class { public: virtual void do_something() = 0; }; class derived_class : public base_class { private: virtual void do_something() { std::cout << "do_something() called"; } }; derived_class重写方法do_something()并将其derived_class private 。 结果是,调用此方法的唯一方法是这样的: base_class *object = new derived_class(); object->do_something(); 如果将对象声明为derived_class类型,则无法调用该方法,因为它是私有的: derived_class *object = new derived_class(); object->do_something(); // –> error C2248: ‘::derived_class::do_something’ : cannot access private […]

inheritance或枚举

我必须为应用程序构建新模型,而不是更好的方法: 使用inheritance或使用enum作为对象类型: 例如 : 图书 class Book { public string Name {get;set;} public string Author {get;set;} public int NumberOfPages {get;set;} } public class Encyclopedie:Book { } public class Novel:Book { } 或更好地使用: class Book { public BookType Type {get;set;} public string Name {get;set;} public string Author {get;set;} public int NumberOfPages {get;set;} } public enum BookType […]

如何使构造函数只能由基类访问?

如果我想要一个只能从子类访问的构造函数,我可以在构造函数中使用protected关键字。 现在我想要相反的。 我的子类应该有一个构造函数,可以通过其基类访问,但不能从任何其他类访问。 这有可能吗? 这是我目前的代码。 问题是子类有一个公共构造函数。 public abstract class BaseClass { public static BaseClass CreateInstance(DataTable dataTable) { return new Child1(dataTable); } public static BaseClass CreateInstance(DataSet dataSet) { return new Child2(dataSet); } } public class Child1 : BaseClass { public Child1(DataTable dataTable) { } } public class Child2 : BaseClass { public Child2(DataSet dataSet) { } […]