Tag: 基类

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

我有以下代码: 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转换为其基类列表的正确方法是什么? 谢谢。

你如何使用多种类型的变量?

我经常使用以下方法将对象链接到父母: Video parent; 有时我的对象可以是不同对象类型的子对象,所以我: int parentType; Video parentVideo; // if parent == VIDEO then this will be used Audio parentAudio; // if parent == AUDIO then this will be used 有没有更好的办法? 如何使用可以是不同类型实例的变量? 编辑:当然,如果video和音频inheritance自相同的基类(例如媒体),我可以这样做: Media parent; 但如果父母不inheritance同一个基类怎么办?

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

即使当前实例是派生类,我们如何从基类中的另一个方法调用虚方法? 我知道我们可以通过使用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, […]

可访问性不一致:基类比子类更难访问

我正在读约瑟夫阿尔巴巴里和本阿尔巴巴里的书“简而言之的C#4.0”。 从那里我发现访问修饰符的主题限制。 第91页,主题“访问修饰符的限制”。 从书中引用。 编译器可防止任何不一致的访问修饰符的使用。 例如,子类本身可以比基类更难访问,但不能更多 所以这说明基类应该与子类相同或更易于访问。 因此,如果基类是内部的,那么子类应该是私有的或内部的。 如果基类是私有的,而子类是公共的,那么将生成编译时错误。 在Visual Studio中尝试此操作时,我发现了一些奇怪的行为。 尝试1:Base是私有的,子类是私有的(Works,正确的行为)如果两者都是内部的,那么它也有效。 private class A { } private class B : A { } // Works 尝试2:Base是私有的,子类是public或internal(这是失败的,正确的行为) private class A { } public class B : A { } // Error 尝试3:Base是内部的,sub是公共的(这是有效的,但它应该失败。因为Base比子类更难访问 internal class A { } public class B : A { } // […]

C#私有(隐藏)基类

是否可以使C#基类只能在它编译成的库程序集中访问,同时使从其inheritance的其他子类公开? 例如: using System.IO; class BaseOutput: Stream // Hidden base class { protected BaseOutput(Stream o) { … } …lots of common methods… } public class MyOutput: BaseOutput // Public subclass { public BaseOutput(Stream o): base(o) { … } public override int Write(int b) { … } } 在这里,我希望我的库的客户端无法访问BaseOutput类,但允许子类MyOutput完全公开。 我知道C#不允许基类比子类具有更多限制性访问,但是还有其他一些法律方法可以实现相同的效果吗? UPDATE 我对这个特定库的解决方案是将基类设置为public和abstract ,并使用“不要直接使用此基类”来记录它。 我还使基类的构造函数internal ,这有效地防止外部客户端使用或inheritance该类。 (这很遗憾,因为其他OO语言让我有隐藏的基类。)

C# – 从派生的方法中隐藏UserControl类的所有方法

我有一个自定义用户控件。 通常它inheritanceUserControl类。 但通过这种方式,它inheritance了UserControl所有公共方法和属性。 但我想隐藏所有这些并实现我自己的一些方法和属性。 假设我有一个名为CustomControl的自定义控件。 public class CustomControl : UserControl 当我创建CustomControl的实例时: CustomControl cControl = new CustomControl(); 当我输入cControl. intellisense为我提供了从UserControl派生的所有方法和属性。 但我想只列出我在CustomControl类中实现的。 谢谢

如何覆盖更丰富类型的接口方法中定义的参数?

我有这些: public class TennisPlayer { } public class RogerFederer : TennisPlayer { } public class RafaelNadal : TennisPlayer { } 然后我有一些方法类,如下所示: public abstract class Manager { protected abstract void ScheduleFriendlies(TennisPlayer player); } public class RafaelNadalManager : Manager { public void ScheduleFriendlies(RafaelNadal rn) { //throw new NotClayException(); } } public class RogerFedererManager : Manager { public […]

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

我不知道这是否可行,但我试图从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; } } }

如何避免错误“inheritance基类时未找到类型’MyType’上的构造函数”

我有一个Visual Studio 2010 Windows窗体应用程序,其中包含其他类将inheritance的Form基类。 基类的构造函数接受子类将传递给基类的参数。 例: public partial class BaseForm : Form { public BaseForm(int number) { InitializeComponent(); } } public partial class ChildForm : BaseForm { public ChildForm(int number) : base(number) { InitializeComponent(); } } 我遇到的问题是,当我尝试在VisualStudio的设计视图模式下打开ChildForm时,我收到以下错误: 找不到类型“MyProject.BaseForm”的构造函数。 注意:无论错误如何,项目编译并运行正常。 如果我用不包含任何参数的构造函数重载构造函数,我可以避免错误。 示例:(这消除了错误) public partial class BaseForm : Form { public BaseForm(int number) { InitializeComponent(); } public […]

为什么C#中的基类允许实现接口契约而不inheritance它?

我偶然发现了C#的这个“特性” – 实现接口方法的基类不必从中派生出来 。 例: public interface IContract { void Func(); } // Note that Base does **not** derive from IContract public abstract class Base { public void Func() { Console.WriteLine(“Base.Func”); } } // Note that Derived does *not* provide implementation for IContract public class Derived : Base, IContract { } 会发生什么是Derived神奇地选择一个公共方法Base.Func ,并决定它将实现IContract.Func 。 这种魔力背后的原因是什么? […]