在将派生的 class 作为参数传递时,调试器是否应该发出警告?
Should the debugger throw some warning when passing a derived class as a parameter?
我正在研究 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());
因为猫没有翅膀,所以我们不需要加上左翼和右翼这两个属性。
此外,并不是所有的动物都有翅膀,所以不需要在 table Animals
.
中定义它们
要解决这个 问题 ,我们可以创建两个 tables Cats
和 Eagles
.
但是在这个post中,我只想提一下继承。
当儿子有 2 个翅膀而爸爸没有时,爸爸可以用儿子代替?
不,不应该。您已经声明您的方法只需要 "Animal" 即可运行。
如果您需要了解翅膀等信息,那么您的合同可能有误?
在这种情况下,也许 animal 就足够了,让 ORM(例如 Entity Framework)解决如何持久化它(即在单独的表中)。
我正在研究 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());
因为猫没有翅膀,所以我们不需要加上左翼和右翼这两个属性。
此外,并不是所有的动物都有翅膀,所以不需要在 table Animals
.
要解决这个 问题 ,我们可以创建两个 tables Cats
和 Eagles
.
但是在这个post中,我只想提一下继承。
当儿子有 2 个翅膀而爸爸没有时,爸爸可以用儿子代替?
不,不应该。您已经声明您的方法只需要 "Animal" 即可运行。
如果您需要了解翅膀等信息,那么您的合同可能有误?
在这种情况下,也许 animal 就足够了,让 ORM(例如 Entity Framework)解决如何持久化它(即在单独的表中)。