Tag: inheritance

类inheritance,强制新类实现某些function

好吧,我正在搞乱一些事情,特别是接口。 假设我有一个“猫”类,其基础为“动物”动物有一个方法就像这样 public virtual void Walk() { // Do walking stuff } 因此Cat会用以下方式覆盖它: public override void Walk() { // Do cat specific walking stuff } 简单吧? 这是我的问题,有没有办法强制cat覆盖基本的Walk()方法? 因此,如果另一个开发人员添加了Dog类,他们将被迫实现自己的Walk方法(即使它只是base.Walk())? 所以接口就解决了这个问题,这就是我所尝试过的 Cat:Animal:Interface Animal必须实现Walk方法,但Cat不支持 Cat:Animal,Interface Cat必须实现Walk方法,但如果开发人员没有添加或忘记’,Interface’那么它将“打破”它。 有人可以给我一些指针来解决这个问题吗? 谢谢。 编辑1 这就是我的目标,我希望它能让它更清晰。 public class Animal { public Animal() { Console.WriteLine(“Animal”); } public virtual void Walk() { } } public class […]

为什么允许从超类到子类的隐式转换?

有人可以告诉我为什么“//编译”的行编译,以及“//不编译”的行为什么不编译? 我不明白为什么A可以隐含地转换为B,而不是相反。 public class SomeClass { static public void Test() { AClass a = new AClass(); BClass b = new BClass(); a = b; // Compiles b = a; // Doesn’t compile } } public class AClass { public void AMethod() { Console.WriteLine(“AMethod”); } } public class BClass : AClass { public void BMethod() { […]

建模“我是*但我也是**”

在[ 这篇文章 ]中,我正在努力实现状态模式,正如@jonp建议的那样。 我不太明白如何使用他发布的内容,但这导致我想到我可能正在尝试将方形钉固定在圆孔中。 所以我的问题: 如果我的网站访问者可以扮演多个角色,即User可以是Vendor , Employer , Advertiser ,或者以上所有,我应该使用inheritance吗? 我宣布: class Vendor : User {} class Advertiser : User {} 等等,但是当用户既是供应商又是雇主时,不同类的实例确实指向相同的底层对象…我不确定这是否可行。 我该如何建模? *更新* 谢谢大家(你们都得到了一点(这是我能给予的))。 过去几天,我一直在用EF,向下转换和状态模式将我的头发拉出来。 角色方法更有意义。

IsAssignableFrom还是AS?

我有下一个代码: private T CreateInstance(object obj) // where T : ISomeInterface, class { … if (!typeof(T).IsAssignableFrom(obj.GetType())) { throw ..; } return (T)obj; } 它可以替换为: T result = obj as T; if (result == null) { throw ..; } return result; 如果不是 – 为什么?

可以使用reflection来实例化对象基类属性吗?

像这样: public class remoteStatusCounts : RemoteStatus { public int statusCount; public remoteStatusCounts(RemoteStatus r) { Type t = r.GetType(); foreach (PropertyInfo p in t.GetProperties()) { this.property(p) = p.GetValue(); //example pseudocode } } } 这个例子有点简单(它来自Jira API – RemoteStatus有4个属性),但想象一下基类有30个属性。 我不想手动设置所有这些值,特别是如果我的inheritance类只有一些额外的属性。 反思似乎暗示了一个答案。 我在构造函数(publix X():y)中看到了使用inheritance ,我可以调用基类构造函数(我认为?如果我错了,请纠正我),但我的基类没有构造函数 – 它源于jira wsdl public remoteStatusCounts(RemoteStatus r) : base(r) { //do stuff } 编辑我可以想象2个有效的解决方案:上面概述的那个,以及某种像this.baseClass这样的关键字,它是type(baseclass)并且这样操作,作为一种指向this的指针。 所以, […]

不一致的可访问性:基类比类不易访问

我已经得到了下面的代码,我正在尝试进行一些inheritance练习,但是当我尝试运行此代码时,它给出了一个错误: Inconsistent Accessability: Base Class is less accessible than class 代码: class Program { static void Main() { FoodProducts Test = new FoodProducts(); Test.Limit(); } } public class FoodProducts : Products { public void FoodProduct() { Console.WriteLine(“This is food product”); } public void Limit() { Console.WriteLine(“This is an Attribute of a Product”); } } 有人能帮助我吗?

在C#中实现单例可inheritance类

我发现在C#中你可以实现一个Singleton类,如下所示: class Singleton { private static Singleton _instance; public static Singleton Instance { get { return _instance ?? (_instance = new Singleton()); } } protected Singleton() { } } 适用于Singleton类型的实例,即: var a = Singleton.Instance; var b = Singleton.Instance; Console.WriteLine(ReferenceEquals(a, b)); //Prints True. 但是,如果我想要Singleton的派生类也遵循Singleton模式,即: class A:Singleton { … } A a = A.Instance; 在这种情况下, Singleton类访问静态成员Instance并创建一个Singleton实例,这不是目标。 此外,此解决方案还存在两个主要问题: […]

提供inheritance的静态属性(从概念上讲)

我有一个C#基类,我将信息与每个类型(而不是每个实例)相关联。 基本上我希望所有子类都显示一个Icon和一个表示该类型的FriendlyName。 我不想创建一个类型实例来获取这些信息,我想要求所有子类提供此信息。 理想情况下,它将位于基础派生的接口中。 我试图使用类属性,但它需要一个常量值,所以虽然我可以设置FriendlyName,但我无法设置Icon,我无法看到一种方法来使所需的属性,所以子类可以没有它(直到运行时间)。 我在子基础上添加了一个静态属性,孩子们可以隐藏,但这有点难看,基础的值真的是荒谬的。 它无法知道孩子的名字是什么。 我可以在属性中进行基础投掷,但是再次,直到运行时才会被捕获。 任何人对我如何实现这样的事情都有任何想法? 我缺少一种模式吗? 任何开箱即用的想法都会受到鼓励。 编辑:我真的需要能够在inheritance树中要求类属性并能够使用嵌入式资源来设置这些属性。 将返回的所有信息都是静态的并且在编译时是已知的。 我只是无法找到一种方法来很好地暴露它。 编辑2:这是我需要的更具体的例子: 我们假设我有一个基类: abstract class Vehicle { … } 然后我有两个孩子: class Car : Vehicle { … } class Truck : Vehicle { … } 我希望能够获得一个代表“汽车”或“卡车”的图标,而不必创建一个实例(一个la Car.Icon),因为给定类型的所有车辆都将具有相同的图标。 我还想确保所有来自车辆的类型以相同的方式显示以获取此Icon,以防将来有人出现并添加新类 class Airplane : Vehicle { … } 编辑3:为什么我需要这个? 好吧,我们有一个可以插入插件的应用程序。 插件由类型定义,当加载类型时,我们向用户显示图标和名称。 当他们单击该图标时,它会创建该类型的实例(并为他们提供一个用于命名实例的对话框等)。 我不需要或不想创建该类型的实例来获取图标。

EF和TPT:在SET子句中多次指定列名

我正在使用EF 6并使用TPT策略来模拟我的问题。 Rule是一个抽象类。 OvertimeRule是一个inheritance自Rule的具体类。 Rule看起来像这样: public abstract class Rule { public int Id { get; set; } public PeriodType PeriodType { get; set; } public int SortOrder { get; set; } public int StatuteId { get; set; } public bool IsActive { get; set; } } OvertimeRule看起来像这样: public partial class OvertimeRule : Rule { public […]

在c#中使用新关键字

我有两节课 class A { public virtual void Metod1() { Console.WriteLine(“A.Method1”); } } class B : A { public new void Metod1() { Console.WriteLine(“B.Method1”); } } 然后我编写一些代码来声明这些类的实例,并调用它们的方法 static void Main(string[] args) { A a = new B(); a.Metod1(); B b = new B(); b.Metod1(); Console.ReadKey(); } 我给出了以下结果: A.Method1 B.Method1 但是当我从B类的签名方法1中删除关键字new并运行Main方法时,我得到了相同的结果。 问题:方法签名中的新关键字是否只是为了更好的可读性? 编辑:是否存在我们离不开新关键字的情况?