C#中this区分大小写同名变量及构造函数:this()用法必要性问询
C#语法问题解答
1. 大小写不同的同名标识符是否必须使用this关键字区分?
C#是天然区分大小写的编程语言,Name(字段)和name(参数)会被编译器识别为两个完全独立的标识符,语法层面没有强制要求加this也可以正常编译运行。
不过实际项目开发中通常建议主动加this前缀,主要是为了提升代码可读性,能让维护者一眼区分开类成员字段和局部参数,避免后续修改命名规则时出现混淆问题。
2. 构造函数后添加的: this()是否必要?什么场景需要用到该语法?
首先针对你提供的示例代码分析:
namespace SharedCode { public class Friendslist : IState { public struct MyContainer { public string Name; public string Firstname; public int Phonenumber; public MyContainer(string name, string firstname, int phonenumber) : this() { this.Name = name; this.Firstname = firstname; this.Phonenumber = phonenumber; } } } }
是否必要?
你这段代码里的: this()是完全不必要的,可以直接删除。
原因:C#中结构体的带参构造函数在C# 10之前要求必须在执行自定义逻辑前初始化所有实例字段,而你已经在构造函数内部给三个字段都做了显式赋值,不需要再调用默认无参构造做初始化;C# 10及之后的版本放开了结构体的字段初始化限制,就更不需要加这个调用了。
适用场景
: this()属于构造函数链调用语法,只有两种场景需要用到:
- 你给结构体写自定义带参构造函数(C# 10之前版本),且没有给所有实例字段显式赋值,这时候调用
this()会触发编译器生成的默认无参构造,给所有字段设置对应类型的默认值,避免编译报错。 - 类/结构体存在多个重载的构造函数,你想复用另一个构造函数的逻辑减少重复代码,比如你有一个两参数的构造函数,可以写为
public MyContainer(string name, string firstname) : this(name, firstname, 0),直接复用三参数构造的赋值逻辑。
内容的提问来源于stack exchange,提问作者Bill_Johnson77
相关产品推荐
相关产品推荐

