【发布时间】:2021-10-10 17:37:42
【问题描述】:
我正在使用 WPF 应用程序,并且我有一个 ViewModel,我在多个视图和 DataGrids 中使用它。
现在我有另一个 View 需要该 ViewModel 的 扩展 或 装饰 版本。所以我决定以这种方式去继承:
public class StandardViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class ExtendedViewModel : StandardViewModel
{
public string Email { get; set; }
}
但是,我想装饰StandardViewModel 的现有实例。特别是在 DataGrid 中选定的对象,因此可以将其传递到其他视图中。
新视图需要访问两个类的属性(Email 和 FirtsName 和 LastName)
所以我正在想办法为我的ExtendedViewModel 创建一个构造函数。
我的想法是直接复制基础实例。
- 这是正确的吗?
- 效率高吗?
- 还有其他方法吗?
public class ExtendedViewModel : StandardViewModel
{
public string Email { get; set; }
public ExtendedViewModel(StandardViewModel base)
{
this = base
}
}
编辑
我不仅为一门课,而且为几门课这样做。而且它们不仅有两个属性,所以我试图避免一个一个地复制这些值。
【问题讨论】:
-
你注意到
this = base不会编译吗?您必须复制属性。 -
我无法访问我的电脑,所以我在写代码。我是否需要一一复制属性?还有其他方法吗?
-
我可以使用静态方法来构造新类而不必复制每个变量吗?我不知道这样的东西是否会编译:
public static ExtendedViewModel MyConstructor(StandardViewModel base) {ExtendedViewMode vm = new(); vm = base; return vm;} -
复制属性可能是这里最简单的解决方案。如果您的基类有copy constructor,那么您可以使用它来复制。你也可以看看
record,如果它适合你的需要。
标签: c# inheritance