龙空技术网

C#12:主构造函数

opendotnet 342

前言:

如今小伙伴们对“结构体在主函数中调用”大致比较着重,咱们都想要学习一些“结构体在主函数中调用”的相关内容。那么小编也在网上汇集了一些对于“结构体在主函数中调用””的相关内容,希望你们能喜欢,咱们一起来学习一下吧!

record:record可以在定义类型时带参,这个参数会转成默认的属性

public record PersonRecord(string FirstName, string LastName){public string Name => $"{FirstName} {LastName}";}

在实例化完对象后,是可以直接使用这些属性的,但用record定义的类型,不会有默认构造函数。

var pr_1 = new PersonRecord("first", "last");Console.WriteLine($"FirstName:{pr_1.FirstName}");Console.WriteLine($"LastName:{pr_1.LastName}");Console.WriteLine($"Name:{pr_1.Name}");

//下面的写法是错误的//var pr_2 = new PersonRecord();//Console.WriteLine($"FirstName:{pr_2.FirstName}");//Console.WriteLine($"LastName:{pr_2.LastName}");//Console.WriteLine($"Name:{pr_2.Name}");

record struct:

同样,也可以用record关键字来定义结构体,定义如下。

public record struct PersonRecordStruct(string FirstName, string LastName){public string Name => $"{FirstName} {LastName}";}

不同的是,结构体会默认带一个无参构造。

var prs_1 = new PersonRecordStruct("first", "last");Console.WriteLine($"FirstName:{prs_1.FirstName}");Console.WriteLine($"LastName:{prs_1.LastName}");Console.WriteLine($"Name:{prs_1.Name}");

var prs_2 = new PersonRecordStruct();Console.WriteLine($"FirstName:{prs_2.FirstName}");Console.WriteLine($"LastName:{prs_2.LastName}");Console.WriteLine($"Name:{prs_2.Name}");

class:

C#到12时,这个功能扩展到了class上了,可以定义一个主构造函数,不同的是,这个构造函数不会转成类型内部的一个默认属性,而只是供内部成员使用的一个变量,就像一个字段一样使用,通常是初始化一些内部成员。如果有多个构造,可以再次定义,但不同之处在于,这些构造函数必须实现主构造函数,用this()方式调用。

public class PersonClass(string firstName, string LastName){public PersonClass() : this("", "") { }public string FirstName { get; } = firstName;public string LastName { get; } = LastName;public string Name => $"{FirstName} {LastName}";}

使用时与普通类型无什么差别。

var pc_1 = new PersonClass("first", "last");Console.WriteLine($"FirstName:{pc_1.FirstName}");Console.WriteLine($"LastName:{pc_1.LastName}");Console.WriteLine($"Name:{pc_1.Name}");

var pc_2 = new PersonClass();Console.WriteLine($"FirstName:{pc_2.FirstName}");Console.WriteLine($"LastName:{pc_2.LastName}");Console.WriteLine($"Name:{pc_2.Name}");

struct:

同样的能力也会在struct上出现。

public struct PersonStruct(string firstName, string LastName){ public string FirstName { get; } = firstName;public string LastName { get; } = LastName;public string Name => $"{FirstName} {LastName}";}

不同之处在于结构体依然有默认构造函数。

var ps_1 = new PersonStruct("first", "last");Console.WriteLine($"FirstName:{ps_1.FirstName}");Console.WriteLine($"LastName:{ps_1.LastName}");Console.WriteLine($"Name:{ps_1.Name}");

var ps_2 = new PersonStruct();Console.WriteLine($"FirstName:{ps_2.FirstName}");Console.WriteLine($"LastName:{ps_2.LastName}");Console.WriteLine($"Name:{ps_2.Name}");

标签: #结构体在主函数中调用