Đây là một câu hỏi tiếp theo của How do I get default values of optional parameters?Sự khác nhau giữa ParameterInfo.DefaultValue và ParameterInfo.RawDefaultValue
Từ documentation, DefaultValue:
Gets một giá trị chỉ ra giá trị mặc định nếu tham số có giá trị mặc định .
Thuộc tính này chỉ được sử dụng trong ngữ cảnh thực thi. Trong ngữ cảnh chỉ phản ánh , hãy sử dụng thuộc tính RawDefaultValue thay thế.
Giá trị mặc định được sử dụng khi giá trị thực tế không được chỉ định trong cuộc gọi phương thức . Một tham số có thể có một giá trị mặc định là null. Đây là khác với trường hợp giá trị mặc định không được xác định.
Từ documentation, RawDefaultValue:
Gets một giá trị chỉ ra giá trị mặc định nếu tham số có giá trị mặc định .
Thuộc tính này có thể được sử dụng trong cả ngữ cảnh thực thi và bối cảnh chỉ phản chiếu.
Giá trị mặc định được sử dụng khi giá trị thực tế không được chỉ định trong cuộc gọi phương thức . Một tham số có thể có một giá trị mặc định là null. Đây là khác với trường hợp giá trị mặc định không được xác định.
Tài liệu tương tự như vậy ngoại trừ tài liệu dành cho ngữ cảnh phản chiếu và không khác. Sự khác biệt đó là gì? Khi nào là DefaultValue
được sử dụng mà không có sự phản ánh? Tôi có nghĩa là làm thế nào để chúng ta có được một giá trị mặc định mà không có sự phản ánh? Tui bỏ lỡ điều gì vậy?
Cập nhật
Tôi tạo ra hai quá tải như thế này:
public void Required(string value)
{
}
public void Optional(string value = "", int i = -1)
{
}
tôi thử nghiệm với:
var f = requiredInfo.GetParameters().Select(p => p.DefaultValue).ToArray();
var g = requiredInfo.GetParameters().Select(p => p.RawDefaultValue).ToArray();
var h = optionalInfo.GetParameters().Select(p => p.DefaultValue).ToArray();
var i = optionalInfo.GetParameters().Select(p => p.RawDefaultValue).ToArray();
//f equals g and h equals i in every way!
Vì vậy, sự khác biệt là những gì cho rằng các chương trình thử nghiệm của tôi (tất cả trong suy nghĩ ngữ cảnh) không có sự khác biệt nào cả?
Có thể liên kết đó sẽ giúp bạn với ngữ cảnh chỉ phản chiếu: http://msdn.microsoft.com/en-us/library/ms172331.aspx – rpeshkov