V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
d3js
V2EX  ›  C#

C# 类中的这个构造函数能不能省略?

  •  1
     
  •   d3js · Sep 4, 2023 · 1651 views
    This topic created in 967 days ago, the information mentioned may be changed or developed.
    // 像素转换信息
    public class ConvertParam
    {
      // 输入的图像信息
      public CImage InImage { get; set; }
    
      // 输出的图像信息
      public CImage OutImage { get; set; }
    
      // 构造函数
      public ConvertParam()
      {
        InImage = new CImage();
        OutImage = new CImage();
      }
    }
    

    大佬们,上面 ConvertParam 类里面有两个 CImage 类型的属性 InImage 和 OutImage ,

    下面的无参构造函数能不能省略呢?

    如果不能的话,这个无参构造函数起什么必要的作用呢?

    cat
        1
    cat  
       Sep 4, 2023   ❤️ 1
    作用就是,当 new 一个 ConvertParam 对象的时候,
    它的 InImage 和 OutImage 属性也同步 new 一个 CImage 对象,
    如果省略,这两个属性就是默认值 null
    rwecho
        2
    rwecho  
       Sep 4, 2023   ❤️ 2
    这个就是默认构造函数, 它可以省略掉, 前提是你要自己初始化 InImage 和 OutImage

    这里有几种写法:

    1.

    public CImage InImage { get; set; } = new CImage(); // 直接初始化属性的时候,赋值。


    2.
    public CImage InImage { get; init; } = null!; // 定义一个不能为空的属性 InImage , 并且声明它必须在初始化的时候进行赋值, 如下

    var convertParam = new ConvertParam()
    {
    InImage = new CImage ()
    }

    3. 定义成 record ,如果是简单的类,用 record 最方便,特别是对一些序列化的类:

    public record ConvertParam(CImage InImage, CImage OutImage);
    yuandong
        3
    yuandong  
       Sep 7, 2023   ❤️ 1
    就是字段初始值为 null 还是 CImage 空对象的区别
    d3js
        4
    d3js  
    OP
       Sep 7, 2023
    @yuandong 结合上面大佬的回答。老哥的综合通透!👍
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5954 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 02:13 · PVG 10:13 · LAX 19:13 · JFK 22:13
    ♥ Do have faith in what you're doing.