有没有办法表示在C#中使用的最佳构造函数,以便开发人员知道默认选择哪个?
假设你有一节课:
public class MyClass
{
public MyClass(int requestReferenceId, int controlNumber1, string companyNumber, int recordId, DateTime mySpecialDate, DateTime myOtherDate, bool isProduction)
: this(controlNumber1, controlNumber1, companyNumber, recordId, mySpecialDate, myOtherDate)
{
IsProduction = isProduction;
}
public MyClass(int requestReferenceId, int controlNumber1, string companyNumber, int recordId, DateTime mySpecialDate, DateTime myOtherDate)
: this(requestReferenceId, controlNumber1, companyNumber, recordId)
{
MySpecialDate = mySpecialDate;
MyOtherDate = myOtherDate;
}
public MyClass(int requestReferenceId, int controlNumber1, string companyNumber, int recordId, DateTime mySpecialDate)
: this(requestReferenceId, controlNumber1, companyNumber, recordId)
{
MySpecialDate = mySpecialDate;
MyOtherDate = mySpecialDate;
}
public MyClass(int requestReferenceId, int controlNumber1, string companyNumber, int recordId)
: this()
{
if (controlNumber1 == 0)
throw new ArgumentException("Invalid Parameter: cannot be 0", "controlNumber1");
if (recordId == 0)
throw new ArgumentException("Invalid Parameter: cannot be 0", "recordId");
if (string.IsNullOrWhiteSpace(companyNumber))
throw new ArgumentException("Invalid Parameter: cannot be empty", "companyNumber");
RequestReferenceId = requestReferenceId == 0 ? 1 : requestReferenceId;
ControlNumber1 = controlNumber1;
ControlNumber2 = controlNumber1;
RecordId = recordId;
CompanyNumber = companyNumber;
}
public MyClass()
{
MyStringProperty = string.Empty;
MySpecialDate = DateTime.Now;
MyOtherDate = MySpecialDate;
RequestReferenceId = 1;
ControlNumber1 = 1;
ControlNumber2 = 1;
TransactionNumber = 1;
ReferenceNumber = 1;
IsProduction = true;
}
public string MyStringProperty { get; set; }
public DateTime MySpecialDate { get; set; }
public DateTime MyOtherDate { get; set; }
public bool IsProduction { get; set; }
public int RequestReferenceId { get; set; }
public int ControlNumber1 { get; set; }
public int ControlNumber2 { get; set; }
public int TransactionNumber { get; set; }
public int ReferenceNumber { get; set; }
public string CompanyNumber { get; set; }
public int RecordId { get; set; }
public string TraceNumber
{
get { return string.Format("{0}-{1}", ControlNumber2, RecordId)}
}
}
Run Code Online (Sandbox Code Playgroud)
并且想通知开发人员以下版本是推荐使用的版本:
public MyClass(int requestReferenceId, int controlNumber1, string companyNumber, int recordId, DateTime mySpecialDate)
Run Code Online (Sandbox Code Playgroud)
C#中有什么东西可以像下面这样做吗?我知道你可以在内部组成一个属性,但是有一个C#功能吗?我错过了什么基本的......哎呀... C#?
[Recommended]
public MyClass(int requestReferenceId, int controlNumber1, string companyNumber, int recordId, DateTime mySpecialDate)
Run Code Online (Sandbox Code Playgroud)
首先,我的建议你链构造的其他方式圆-进行较少的参数链的那些(可能间接)一个构造函数与所有的参数,并作出其设定的任何唯一的一个.这样可以节省你的作业,因为它们正在分散在各个地方
其次,我考虑使用可选参数而不是所有重载:
public MyClass(
int requestReferenceId,
int controlNumber1,
string companyNumber,
int recordId,
DateTime mySpecialDate, = default(DateTime)
DateTime myOtherDate = default(DateTime),
bool isProduction = false)
{
...
}
Run Code Online (Sandbox Code Playgroud)
那么你只有一个构造函数,所以你不必"推荐"任何东西.开发人员必须为所有必需参数指定参数,但可以选择为其指定参数的可选参数.不要忘记不同的开发人员可能处于不同的上下文中 - 如果您建议在没有isProduction参数的情况下重载,但他们想要指定isProduction参数,则会导致您的建议与他们需要实现的内容之间发生冲突.
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |