C# 继承如何一次应用于一组类

C# 继承如何一次应用于一组类,c#,inheritance,abstract-class,C#,Inheritance,Abstract Class,在c#中,我希望将抽象类应用于许多其他类。我怎样才能在不给每门课打分的情况下完成呢 public abstract class Bar { public bool Blah { get; set; } } public class Foo : Bar { public int FooId { get; set; } } public class Stool : Bar {} public class Fun : Bar {} public class NoFun : Bar {} 等等

在c#中,我希望将抽象类应用于许多其他类。我怎样才能在不给每门课打分的情况下完成呢

public abstract class Bar
{
 public bool Blah { get; set; }
}

public class Foo : Bar
{
 public int FooId { get; set; }
}

public class Stool : Bar {}
public class Fun : Bar {}
public class NoFun : Bar {}
等等等等


是否有一种方法可以抓取每个类,然后将其标记为继承
Bar

否。您可以使用visual studio插件或其他类似的静态代码操作工具来完成此操作,但就语言本身而言,无法在运行时修改类型的继承,据我所知,现有的visual studio功能无法为您实现此功能。

除了使用其他海报中提到的模板和/或VS插件外,从技术上讲,使用Reflection.Emit实现此功能是可行的,尽管这相当费劲,而且可能性能不太好。它可以归结为IL操作,必须创建一个函数,手动将IL从基类映射到新的动态类型

如果您可以使用接口而不是抽象类,那么会更容易一些。以下是一些示例代码,可以让您以任何方式开始:

    AssemblyName assemblyName = new AssemblyName("MyDynamicAssembly");

    AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly
        (assemblyName, AssemblyBuilderAccess.RunAndSave);

    ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule
        ("MyDynamicAssembly", "MyDynamicAssembly.dll");

    TypeBuilder typeBuilder = moduleBuilder.DefineType
        ("MyDynamicAssembly." + typeName, TypeAttributes.Public, typeof(object));

    typeBuilder.AddInterfaceImplementation(typeof(IMyInterface)); 

    typeBuilder.DefineDefaultConstructor(MethodAttributes.Public);

我不明白。如何指定要从
Bar
继承的类?当然不是程序集中所有的。@root45-都在名称空间中,或者都在列表中。不确定它将如何工作,因此有一个问题:)首先想到的是泛型。但是您仍然需要更改所有现有类的类定义,这正是您不想要的。也许你必须寻找一个工具来自动完成这项工作,或者使用模板来创建你的类。@MilkyWayJoe-我有点希望有一些很棒的方法来使用泛型或反射来完成这项工作,但我想不是:(您正在使用代码生成吗?如果是这样,您可以修改默认的T4 templates.Dang,因此我被困在一堆类上的复制粘贴
:Bar
。)(我讨厌复制粘贴,它是邪恶的。好吧,你可以改进你的整体设计,这样你就不需要有一大堆的类都使用相同的基类。我们对你的程序了解不够,无法建议你如何去做。哈哈!哈哈,我差点把
为什么?!
的一段摘录放进去,但我不想让事情复杂化。此继承将用于支持EF 4.1中映射的实体的临时软删除/级联还原。数据库中的每个类和每个表都需要有两个相同的字段。您是否可以有一个方法接受一个“表”并将其删除,而不是让每个“表”都知道如何删除自身。您可能会否则,必须让每个DB Table类扩展一些公共类或一些公共接口,但接口可能更适合(而不是抽象类)。DB表类是自动生成的代码吗?如果是,请将抽象类放在自动生成它们的任何对象中。不是真的,不是。表不知道如何删除自身,记录知道如何在不推荐使用时抛出标志。这允许在不推荐使用数据的环境中维护引用完整性。接口将这是多余的,因为它将为每个类定义契约,然后我仍然需要在每个类中写出字段。