如何为C#主构造函数指定访问修饰符?
使用C#主构造函数实现带工厂方法的判别类
可以实现,核心是给主构造函数单独指定私有访问修饰符,类本身保持公开即可。
在C# 12及以上版本中,主构造函数支持单独设置访问修饰符,只需要在主构造函数的参数列表前添加private关键字,就能限制外部直接实例化,同时保留类的公开性,让静态工厂方法可以内部调用构造函数。
完整实现代码如下:
public class SomeResult<TResult> private(TResult? result, Dictionary<string, string>? errors) { public TResult? Result => result; public Dictionary<string, string>? Errors => errors; public static SomeResult<TResult> GetSuccess(TResult result) => new SomeResult<TResult>(result, null); public static SomeResult<TResult> GetFailure(Dictionary<string, string> errors) => new SomeResult<TResult>(null, errors); }
关键说明
- 主构造函数前的
private修饰符将构造函数设为私有,外部代码无法直接通过new SomeResult(...)创建实例 - 类的静态工厂方法
GetSuccess和GetFailure属于类内部成员,有权限调用私有主构造函数 - 这样就严格强制了你设定的规则:成功实例只有Result非空、Errors为空;失败实例只有Result为空、Errors非空,外部无法构造不符合规则的对象
内容的提问来源于stack exchange,提问作者Mayur Ekbote
相关产品推荐
相关产品推荐

