同一对象的多个派生

Wil*_*ill 1 c#

我不知道这叫什么,但是这里有.

public class Person
{
    long ID;
}

public class Banker : Person
{
    string example1;
}

public class Scientist : Person
{
    string example2;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现我们的ORM以匹配我们的数据库,我遇到了这个问题.希望这个例子很容易理解.

现在,对象关系映射对于作为银行家或科学家的人来说是有意义的.我遇到的问题是作为银行家和科学家的人.因此,我正在努力实现的是能够创建一个Banker或Scientist并能够将其转换为具有完全相同的基类对象.

我并不是在寻找多重继承.我正在寻找的是一种使用相同的基类对象实例化多个对象的方法.例如,Person是银行家和科学家,但不是银行家科学家(具有银行家和科学家的属性的类).

这实际上是数据库中的一个缺陷,模型现在正在改变,但它仍然是一个古玩问题.

jas*_*son 9

C#不支持多重继承,因此当我们需要对与您类似的情况进行建模时,我们经常使用组合或接口.因为您正在处理ORM,所以您可能需要使用接口方法.考虑一下:

interface IPerson { }
interface IBanker : IPerson, IRuinedTheEconomy { }    
interface IScientist : IPerson { }
interface IRobot : IAsimov { }

class Person : IPerson { }
class Banker : Person, IBanker { }
class Scientist : Person, IScientist { }
class BankerAndScientist : Person, IBanker, IScientist { }
Run Code Online (Sandbox Code Playgroud)

至于你正在采取的方法,你不能在兄弟类之间(也就是两个具有相同基类的类)之间进行转换.这是一件好事.请记住,继承用于模拟"是一种"关系.

class Animal { }
class Dog : Animal { }
class Cat : Animal { }
Run Code Online (Sandbox Code Playgroud)

所以这里DogAnimalCat是一个Animal,但它是没有意义的,能够在两者之间进行铸造.是的,您可以定义用户定义的转换,但不能; 这将是一个巨大的设计气味.