我不知道这叫什么,但是这里有.
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是银行家和科学家,但不是银行家科学家(具有银行家和科学家的属性的类).
这实际上是数据库中的一个缺陷,模型现在正在改变,但它仍然是一个古玩问题.
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)
所以这里Dog是Animal和Cat是一个Animal,但它是没有意义的,能够在两者之间进行铸造.是的,您可以定义用户定义的转换,但不能; 这将是一个巨大的设计气味.