【问题标题】:Why doesn't my program work if I comment out a member's constructor call?如果我注释掉成员的构造函数调用,为什么我的程序不工作?
【发布时间】:2016-08-02 07:07:37
【问题描述】:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication8
{
    class Test
    {
        public StringBuilder a;

        /*public Test()
        {
            a = new StringBuilder();
        } */
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test testobj = new Test();
            testobj.a.Append("Hello");
            Console.WriteLine(testobj.a);
            Console.ReadLine();
        }
    }
}

Test Class 的默认构造函数不应该为类中的每个文件调用每个默认构造函数吗?

【问题讨论】:

  • 您的代码 sn-p 仅在注释部分不存在时才有效。我在这里没有看到错误。
  • 类中的每个字段都是用默认值创建的,类的默认值为空。
  • 不,默认构造函数永远不会这样做。
  • 谢谢。你是对的,我的意思是评论它不起作用

标签: c# constructor stringbuilder default-constructor


【解决方案1】:

您似乎有 C++ 背景。您需要确保更好地理解 C# 中的对象引用。 a 为引用类型,默认初始化为null

【讨论】:

  • 你是对的。我来自 C++。谢谢!我会深入研究更好的对象引用
  • @PaoloVeneziani 在 C# 中将 class 类型的所有内容视为隐藏在 unique_ptr 中,并且在任何地方使用 .class 类型你真的做一个->
  • @PaoloVeneziani 哎呀,那个例子应该说shared_ptr 而不是unique_ptr。也不要过分类比,智能指针使用引用计数来立即清理,在 C# 中,GC 会按照自己的节奏进行清理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多