gpt4 book ai didi

C# 组合类/模型或创建具有继承的多个类

转载 作者:行者123 更新时间:2023-12-05 04:14:48 24 4
gpt4 key购买 nike

这是一个非常基本的问题,但它困扰着我。我应该将相似的模型属性组合到一个类模型中,还是将它们分开并在有意义的地方添加继承更好?我倾向于只返回每个请求所需的数据,但当它的数据量较小时我会质疑它。最好举例说明。

我有一个执行各种 AJAX 调用的 Web 应用程序。许多调用返回 IEnumerables

public class GroupBaseModel {
public int GroupId { get; set; }
public int GroupName { get; set; }
}
public class RoleBaseModel
{
public int RoleId { get; set; }
public int RoleName { get; set; }
}
public class GroupMemberModel : GroupBaseModel
{
public bool IsMember { get; set; }
}
public class GroupRoleBaseModel {
public int GroupId { get; set; }
public int GroupName { get; set; }
public int RoleId { get; set; }
public int RoleName { get; set; }
}

我有调用返回几个不同页面上每个类的 IEnumerables。一些调用只返回 GroupRoleModel,而另一些调用将返回 GroupRoleBaseModel 等(此时每个请求都在拉取每个请求所需的最少数据)

那么我的第一个问题是,是否可以连接两个现有的类?例如上面的GroupRoleBaseModel只是GroupBaseModel + GroupRoleModel的属性,我可以将它们组合起来而不需要重新实现所有属性吗?

第二个问题是,既然我们讨论的是非常小的类,我是否应该像下面那样使用一个类?即使某些请求会返回不需要的数据?

public class GroupBaseModel {
public int GroupId { get; set; }
public int GroupName { get; set; }
public int RoleId { get; set; }
public int RoleName { get; set; }
public bool IsMember { get; set; }
}

谢谢你的想法!

最佳答案

Multiple class inheritance由于语言限制,在 C# 中是不可能的。

您的选择是。

  1. 将 2 个类嵌套到一个容器类中
  2. 使用 1 个包含两个属性的类(为了代码清晰,可能分成 2 个部分类
  3. 使用每个父类上最常见的属性使用继承链。
  4. 实现“多重继承”模拟 using interfaces .

这真的取决于您的用例。但要确保您复制的属性尽可能少。例如,在您的情况下,不要在 GroupRoleBaseModel 上再次编写所有属性,而是选择一个继承。

    public class GroupBaseModel
{
public int GroupId { get; set; }
public int GroupName { get; set; }
}
public class RoleBaseModel
{
public int RoleId { get; set; }
public int RoleName { get; set; }
}
public class GroupMemberModel : GroupBaseModel
{
public bool IsMember { get; set; }
}
public class GroupRoleBaseModel : GroupBaseModel
{
public int RoleId { get; set; }
public int RoleName { get; set; }
}

每个选项都有其优点和缺点,虽然我知道没有什么是您想要的。

将所有属性包含在一个类中没有错,但为什么要返回所有数据?您可以编写多个函数来仅填充所需的属性。

关于C# 组合类/模型或创建具有继承的多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com