调试器在将派生类作为参数传递时是否应该引发一些警告



我正在研究ASP.NET Core,我发现了一个关于继承的东西(因为IdentityUser可以由ApplicationUser派生(。

这里只是一个演示来解释它是什么:

实体:

public class Animal
{
public string Name { get; set; }
}
public class Cat : Animal
{
// cat has no wings...
}
public class Eagle : Animal
{
public object LeftWing { get; set; }
public object RightWing { get; set; }
}

数据库上下文(仅用于演示(:

public void SaveChanges(Animal animal)
{
// save changes for "Animals" table...
}

并使用它:

var cat = new Cat { Name = "Norris" };
var eagle = new Eagle { Name = "Voldemort", LeftWing = "good", RightWing = "broken" };
SaveChanges(cat);
SaveChanges(eagle);
// in asp.net core, this can be:
// public class ApplicationUser : IdentityUser {}
// _dbContext.Users.Add(new ApplicationUser { ExtensionProperty = "foo" });
// but we forgot to update the "Users" table 
// which refers to "ApplicationUser" class instead if "IdentityUser" class by default
// _dbContext.Users.Add(new IdentityUser());

由于猫没有翅膀,我们不需要添加左翼和右翼作为两个属性。

此外,并不是所有的动物都有翅膀,所以它们不需要在表Animals中定义。

为了解决这个问题,我们可以创建两个表CatsEagles

但在这篇文章中,我只想提到继承。

什么时候爸爸可以换成儿子,而儿子有两只翅膀,但爸爸没有?

不,不应该。您已经说过,您的方法只需要一个"Animal"即可发挥作用。

如果你需要了解翅膀等,那么也许你的合同是错误的?

在这种情况下,也许动物就足够了,让ORM(如实体框架(来解决如何持久化它(即在单独的表中(。

相关内容

  • 没有找到相关文章

最新更新