【问题标题】:Initialize base class’s fields in subclass constructor in C#在 C# 的子类构造函数中初始化基类的字段
【发布时间】:2015-03-30 13:31:53
【问题描述】:

我有一个包含三个字段的基类,但不是像这样以正常方式初始化它的字段:

class ParentClass
{
    public string Name { get; set; }
    public string Family { get; set; }
    public string Address { get; set; }

    public ParentClass(string Name, string Family, string Address)
    {
        this.Name = Name;
        this.Family = Family;
        this.Address = Address;

    }

}

class ChildClass : ParentClass
{
    public int StudentID { get; set; }
    public int StudentScore { get; set; }

    public ChildClass(string Name, string Family, string Address, int StudentID, int StudentScore)
        : base(Name, Family, Address)
    {

        this.StudentID = StudentID;
        this.StudentScore = StudentScore;

    }

    static void Main(string[] args)
    {
        var Pro = new ChildClass("John", "Greene", "45 Street", 76, 25);
        Console.WriteLine(Pro.Name + Pro.Family + Pro.Address + Pro.StudentID + Pro.StudentScore);
    }
}

我已经初始化了 ChildClass 构造函数中的字段,而没有像这样显式调用基类构造函数:

class ParentClass
{
    public string Name { get; set; }
    public string Family { get; set; }
    public string Address { get; set; }
}

class ChildClass : ParentClass
{
    public int StudentID { get; set; }
    public int StudentScore { get; set; }

    public ChildClass(int StudentID, int StudentScore)
    {
        Name = "John";
        Family = "Greene";
        Address = "45 Street";
        this.StudentID = StudentID;
        this.StudentScore = StudentScore;

    }
    static void Main(string[] args)
    {
        var Pro = new ChildClass(76, 25);
        Console.WriteLine(Pro.Name + Pro.Family + Pro.Address + Pro.StudentID + Pro.StudentScore);
    }
}

我知道我可以在父类本身中初始化父类的字段,这是一个虚假的例子,但我想知道在现实生活和更复杂的情况下做类似的事情是否被认为是一种好习惯,是我有什么理由不应该做这样的事情?至于不显式调用基类构造函数?

编辑:我更担心没有显式调用基类构造函数并在子类部分初始化它,所以我编辑了最后提到的字段被暴露出来的部分。 p>

【问题讨论】:

  • 如果您想访问或使用chieldClass 中的parentClass 字段,您必须将它们暴露给chieldClass 即:通过使它们成为protectedpublic,那么是什么问题?我认为您的问题完全没有意义,根本没有用!!!!!!!
  • 我比较担心没有显式调用基类构造函数部分,你没注意,我把最后一部分编辑掉了,以免造成更多混乱。

标签: c# constructor subclass base-class


【解决方案1】:

正如您已经看到的,这些字段已经“公开”了。在第一个示例中,您仍然可以从派生类中获取这些变量。

关于不使用基类构造函数是一种好习惯,我会说不是。通过仅具有参数化的基类构造函数,您可以确保该类的未来实现者初始化基类属性。例如,在你的第二个我可以写:

public ChildClass(int StudentID, int StudentScore)
{
    this.StudentID = StudentID;
    this.StudentScore = StudentScore;
}

没有错误。除此之外,您的样本之间几乎没有差异。

【讨论】:

  • 是的,你已经解决了这两个部分,我已经编辑了最后一部分,以避免从“down-vote happy”得到更多的否决我应该说,人们,对不起,但是这个地方对初学者不友好,当我的问题不是重复的问题时,我为什么要投反对票?
  • @Xellarix 我没有投反对票,但从您收到的评论来看,似乎有两个人认为它没有用,因为您误解了 both 类都有这些字段“暴露”,同时缺少关于构造函数的部分。鉴于这种误解,当问题没有真正意义时,我可以看到“没有用”的反对票。请注意,“不重复”并不是投票的唯一条件。
猜你喜欢
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 2023-03-31
  • 1970-01-01
  • 2015-08-28
  • 1970-01-01
相关资源
最近更新 更多