Tag: derived class

将派生类的列表转换为仍返回派生类对象的基类列表

我有以下代码: public class BaseClass { public string A { get; set; } } public class DerivedClass : BaseClass { public string B { get; set; } } List _derivedClass = new List() { new DerivedClass() { A = “test1”, B = “test2” } }; List _baseClass = _derivedClass.Cast.ToList(); 代码编译没有任何错误,但是,我希望_baseClass只包含属性A (类型为BaseClass对象),但它返回A和B属性( DerivedClass类型的DerivedClass )。 我错过了什么以及将派生类的List转换为其基类列表的正确方法是什么? 谢谢。

XMLSerialization:参数对象’Sw’的类型不是原始的

我正在尝试将对象序列化为XML文件,但是我收到了上述错误。 问题似乎是包含基类列表的对象,但是由从基类派生的对象填充。 示例代码如下: public class myObject { public myObject() { this.list.Add(new Sw()); } public List list = new List(); } public class Units { public Units() { } } public class Sw : Units { public Sw(); { } public void main() { myObject myObject = new myObject(); XmlSerializer serializer = new XmlSerializer(typeof(myObject)); TextWriter textWriter […]

在构造函数中使用inheritance(publix X():y)

我刚刚看到下面的代码,但我不理解构造函数声明中的基类派生。 这是什么,这可能与序数方法有关吗? public SplashAppContext(Form mainForm, Form splashForm) : base(splashForm) { this.mainForm = mainForm; splashTimer.Tick += new EventHandler(SplashTimeUp); splashTimer.Interval = 2000; splashTimer.Enabled = true; }

即使当前实例是派生类,我们如何从基类中的另一个方法调用虚方法?

即使当前实例是派生类,我们如何从基类中的另一个方法调用虚方法? 我知道我们可以通过使用base.Method2()从Derived类中的方法调用Base类中的Method2,但我想要做的是从Base类中的另一个虚方法调用它。 可能吗? using System; namespace ConsoleApplication1 { class Program { static void Main( string[] args ) { Base b = new Derived( ); b.Method1( ); } } public class Base { public virtual void Method1() { Console.WriteLine(“Method1 in Base class.”); this.Method2( ); // I want this line to always call Method2 in Base class, […]

我可以从派生类的默认构造函数中将参数传递给基础构造函数吗?

假设我有一个抽象基类Deck: public abstract class Deck { public List cards; public Deck(string[] values, string[] suits) {…} … } 和派生类EuchreDeck: public class EuchreDeck : Deck { string[] values = new string[] { “9”, “10”, “J”, “Q”, “K”, “A” }; string[] suits = new string[] { “clubs”, “spades”, “hearts”, “diamonds” }; public EuchreDeck() : base(values, suits) // Error. […]

派生和基类,我可以明确设置基数吗?

public class SuperCar: Car { public bool SuperWheels { get {return true; } } } public class Car { public bool HasSteeringWheel { get {return true;} } } 如何设置派生Supercar的基类? 例如,我想简单地设置SuperCars基类,如下所示: public void SetCar( Car car ) { SuperCar scar = new SuperCar(); car.Base = car; } 基本上,如果我有Car对象,我不想手动迭代汽车的每个属性以设置SuperCar对象,我认为这是你可以做到的唯一方法,但如果你可以用另一种方式做到这一点会好得多。

如何从派生类获取基类实例

我不知道这是否可行,但我试图从Derived Class中获取Base Class实例。 在C#中,我可以使用base关键字来访问Base Class的属性和方法(当然),但我想使用base本身。 尝试这样做会导致“使用关键字’base’在此上下文中无效”错误。 示例代码 public class SuperParent { public int SPID; public SuperParent() { } } public class SubChild : SuperParent { public SubChild(int pSPID) { base.SPID = pSPID; } public int BaseSPID { get { SuperParent sp = base; return sp.SPID; } } }

为什么我们不能在派生类中使用带参数的构造函数

为什么这不可能? 在使用constructor-parameter实例化“DerivedClass”时,我得到以下编译器错误: ‘GenericParameterizedConstructor.DerivedClass’不包含带有1个参数的构造函数 但调用一个非常相似的方法是有效的 为什么? class Program { static void Main(string[] args) { // This one produces a compile error // DerivedClass cls = new DerivedClass(“Some value”); // This one works; DerivedClass cls2 = new DerivedClass(); cls2.SomeMethod(“Some value”); } } public class BaseClass { internal T Value; public BaseClass() { } public BaseClass(T value) { […]

如何从基类调用派生类方法?

我已经阅读了几个类似的问题,但似乎没有解决我面临的问题。 典型的答案是作为派生类进行转换,但我不能,因为我不知道派生类类型。 这是我的例子: class WireLessDevice { // base class void websocket.parsemessage(); // inserts data into the wireless device object } class WiFi : WireLessDevice { // derived class GPSLoc Loc; } 还可以导出无线设备以制作蓝牙,Wi-Max,蜂窝等设备,因此我不知道哪种类型的无线设备将接收数据。 当在基类中的websocket上接收到GPS数据包时,我需要更新派生设备的位置。 我想或许可以通过队列发送消息或创建事件处理程序并在事件参数中发送位置,但是当数据停留在类中时,这些看起来有点笨拙。 是否有内置于该语言中的内容可以让我在不知道类型的情况下从基类调用我的派生设备?

C#访问派生类中的受保护成员

我写了以下代码: public class A { protected string Howdy = “Howdy!”; } public class B : A { public void CallHowdy() { A a = new A(); Console.WriteLine(a.Howdy); } } 现在,在VS2010它会导致以下编译错误: 无法通过类型“A”的限定符访问受保护的成员“Aa”; 限定符必须是’B’类型(或从中派生)。 这对我来说似乎非常不合逻辑 – 为什么我不能从类的方法访问类实例的protected字段,该方法是从它派生的? 那么, 为什么会这样呢? 找到了严格的答案 – http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx