Tag: inheritance

C#覆盖/向对象添加方法/字段

我有一个为我创建和设置对象的库,然后我可以使用这些对象来做东西。 假设我给了“A”类对象“a” 所以我想覆盖该特定对象中的方法,我不想更改其类的代码,因为这需要更改库。 在Ruby中我可以使用Singleton Classes来做到这一点,例如: class FirstClass def test p “test” end end o = FirstClass.new class << o def test p "overridden" end def extraMethod p "ok" end end o.test # prints "overridden" o.extraMethod 现在我怎样才能在C#中做同样的事情? 更新 我最终没有使用我提交的答案,因为它太丑了,它需要更改基类中的所有私有字段以保护或公共以使它们存在于派生类中,因此我可以将值从base复制到派生。 我最终使用的方法是将从基类派生的Type传递给库并更改库,以便它使用以下命令创建实例: (A)Activator.CreateInstance(mytype, arguments);

使用方法:使用同一个表中的不同业务逻辑映射(NHibernate)多个类?

我目前正在使用一个棕色数据库,该数据库包含一个表,其中包含3种不同类型的业务数据。 它与SalesOrders和订单线有关。 在旧的应用程序中,我们能够为每个销售订单添加3种类型的订单行:产品,小时费率和文本行。 15年前,这是一个快速而肮脏的解决方案,可以在Delphi中轻松查询以获取一个数据网格中的所有行。 一切 现在我尝试使用NHibernate在C#中构建对象模型。 由于这三种线路类型没有真正的业务逻辑连接,我已经制作了3个没有基类的单独实体。 但是,我想将这3种类型合并到一个列表中,以便我可以订购它们。 我已经考虑过使用inheritence,每个类的表,因为表符合要求(没有具有非空约束的列)。 这不是一个合乎逻辑的步骤,因为每种类型的业务完全不同(只有共同点是userId,description和remarks)。 也许是一个组件? 但是如何将属性映射到3个不同的类而没有基类或除表名之外的任何类型的链接? 我希望你们明白我写的是什么。 我还没有真正的代码,我只是在纸上写了一些关于如何处理这段代码的东西。 谁在这里可以帮助我的路上? 亲切的问候,泰德

如何查找作为基类直接后代的类型?

我需要获得所有类型的程序集inheritance一些基类但只有第一个后代。 例如,如果我有: class Base { } class FirstClass : Base { } class SecondClass : FirstClass { } 现在 var directOnes = assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(Base))); 应该只返回FirstClass而不是SecondClass 。 有办法找出来吗?

关于generics,inheritance和链接的棘手问题

对于上下文 – 阅读本文 。 问题: class Program { static void Main() { var b = new bar(); b.buzz().fizz().buzz().fizz(); //cool // ^FAIL!!!…<———————————— Console.ReadLine(); } } public class foo { public foo fizz() { return this; } } public class bar : foo { public bar buzz() { return this; } } 解: class Program { static […]

流畅的NHibernate集合表每子类

我在Fluent NHibernate中遇到inheritance问题。 我之前设法让Table-Per-Subclass工作,但我无法获得基类的集合。 它正在寻找我没有的基类表。 这是我的架构: User(Id, Name, Email) User_Account_Password(Id, UserId, PasswordHash, Salt) User_Account_Facebook(Id, UserId, FacebookId) 这是我的对象模型: public class User { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Email { get; set; } public virtual IList Accounts { get; set; } } public abstract […]

从其通用父类inheritance的嵌套类

这可能是某种情况,有这种情况,AN使用此代码示例从Ainheritance代码? 这样设置的原因是我需要多个inheritance自Base和Nested : Base ,其中服务器只有base,而客户端有扩展的Nested。 通过这种方式,可以很容易地使用代码,在这些代码中,它们之间和彼此之间会有一些共享代码。 问题是我必须在内部编写相同的代码 A and AN B and BN C and CN 等等 我通过使用接口替换嵌套的抽象类并执行来暂时解决了这个问题 AN : A, INested ,但现在我必须在所有嵌套类中重写Base.Nested代码。 目前,嵌套类很小并且可以管理。 希望这不是一个令人困惑的问题…… public abstract class Base where TType : class { public TType data; internal void CommonCodeForAll() { } public abstract void Update(); public abstract class Nested : Base { public abstract […]

如何将子类分配给非generics类中的generics字段

在C#中,我试图将私有generics变量存储在通过generics方法传入的非generics类中。 generics方法应该将子类转换为基类类型。 以下是此问题的示例: class BaseModel { } class DerivedModel : BaseModel { } class Data where T : BaseModel { } // Class is NOT generic class DataConsumer { // How do I set this to generic? private Data data; public void Set(Data data) where T : BaseModel { // Compile time error: // Cannot […]

不同FW的协方差导致代码中断?

我在NDC 2010上看到了Jon Skeet的演讲 他提到了一些有趣的事 public Class Base { public void Foo(IEnumerable strings){} } public Class Child:Base { publc void Foo(IEnumerable objects) {} } Main : List lst = new List(); lst.Add(“aaa”); Child c = new Child(); c.Foo(lst); 使用C#3,它将调用: Base.Foo 使用C#4,它将调用: Child.Foo 我知道这是因为协方差 题 : 是不是有点代码破坏变化? 有没有解决方法,所以这段代码将继续像第3版那样工作?

创建对象时出现错误“存在显式转换(您是否错过了转换)”:

我有兴趣学习OOP概念。 在尝试使用inheritance的简单程序时。 我注意到了这个错误。 我无法理解为什么会出现这种错误? 我在下面给出了简单的c#代码: class Animal { public void Body() { Console.WriteLine(“Animal”); } } class Dog : Animal { public void Activity() { Console.WriteLine(“Dog Activity”); } } class Pomeranian : Dog { static void Main(string[] args) { //Dog D = new Dog(); Dog D = new Pomeranian(); —–> No error occur at this line […]

Include()ThenInclude()在Table Per Hierarchy策略中抛出“Sequence包含多个匹配元素”exception

我正在使用Entity Framework 7和代码优先,我有一个涉及3个级别的父子关系的模型: Corporations有companies Companies属于corporation并拥有factories Factories属于一家company 由于这3个实体共享很多共同点,因此它们都从一个抽象的BaseOrganization实体inheritance。 当我试图列出所有工厂,包括他们的母公司,然后包括他们的母公司时,我有这两种不同的情况: 如果不将 BaseOrganization 包含到上下文中,代码优先创建三个表 (对应于Table-Per-Concrete-Type或TPC模式)。 Include()和ThenInclude()工作正常,我可以按预期列出工厂和遍历关系。 将 BaseOrganization 包含到上下文中,代码优先创建一个带有鉴别器字段的表 (对应于Table-Per-Hierarchy或TPH模式)。 Include()和ThenInclude()抛出一个Sequence contains more than one matching elementexception的Sequence contains more than one matching element 。 这个问题(没有inheritance和抽象基类模式)已经在EF7 Github repo中得到了解决,并且已被清除(参见https://github.com/aspnet/EntityFramework/issues/1460 )。 所以我目前不知道我的方法是否有问题,或者这显然是EF7 RC1的问题? 请注意,我更喜欢保持inheritance,以便我的SQL模型更具可读性。 以下是完整的复制代码: using System; using System.Collections.Generic; using System.Linq; using Microsoft.Data.Entity; namespace MultiLevelTest { // All places share name […]