【问题标题】:Construction of the base class constructor class assignment [closed]基类构造函数类赋值的构造[关闭]
【发布时间】:2023-03-03 19:15:01
【问题描述】:
public class Test1
{
    public int Q1 { get; set; }
    public string Q2 { get; set; }

}

public class Test2 : Test1
{
    public Test2(Test1 Value)
    {
        Q1 = Value.Q1;
        Q2 = Value.Q2;
        //Does this way of writing is getting very long and difficult

    }
}

public class Test2 : Test1
{
    public Test2(Test1 Value)
    {
        base = Value;
        //In this way a short and easy ways
    }
}



   public Test1 ExampleTest()
    {
        return new Test1();
    }

    public void Example()
    {
        Test2 t = new Test2();

        t = ExampleTest();
    }

我直接赋值给类继承怎么弄?

【问题讨论】:

  • 你想做什么?我建议您阅读有关 C# 或 OOP 的一般书籍。
  • 你想要达到的效果还不错,但是你尝试的方式有点臭。例如List<T> 类有类似class List<T> : IEnumerable<T> { public List<T>(IEnumerable<T> source) { } } 的东西。但是在您的情况下,您有一个基类(而不是接口),这使整个方程式不同。有很多方法可以解决这个问题,但在这种情况下,您应该首先考虑组合。这不是吗:public class Test2 { Test1 Test1; public Test2(Test1 Value) { Test1 = Value } }.
  • 不能快速分配给类继承吗?类继承我在这里收到了一个小样本,但是我该怎么做最简单的分配或样本找不到相关来源。

标签: c# class instance


【解决方案1】:

两者都是错误的-

首先,您在派生类构造函数中初始化基类成员,这是一种不好的做法。这里的问题是你必须在这里利用继承,让基类通过基类构造函数来初始化被继承的成员。

在 2nd 中,您首先创建基类对象,然后将其传递给派生对象的创建。这是一种内存浪费,因为我们不需要基类对象来实例化派生对象。此外,这种方法不适用于抽象类。

【讨论】:

  • 在第二个中,你错过了要点 base = Value is not all valid 即使它是具体的类也不会起作用。
  • 我相信他只是写了那个伪代码。他可能意味着将传递的 Test 1 对象的值映射到 Test 2 中继承的成员。
  • 不,这就是他在版本 1 中所做的,那么为什么要再次为同一件事编写伪代码?我怀疑 OP 是故意的。
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多