Sự khác biệt giữa các phương pháp GetValue
, GetConstantValue
và GetRawConstantValue
trên lớp PropertyInfo
là gì? Các tài liệu MSDN tiếc là không phải là rất rõ ràng về chủ đề này.Sự khác biệt giữa GetValue, GetConstantValue và GetRawConstantValue
Trả lời
Cả GetConstantValue
và GetRawConstantValue
được dành cho sử dụng với literals (nghĩ const
trong trường hợp của các lĩnh vực, nhưng ngữ nghĩa nó có thể áp dụng cho nhiều hơn chỉ là các trường) - không giống như GetValue
đó sẽ nhận được giá trị thực tế của một cái gì đó trong thời gian chạy, một giá trị không đổi (thông qua GetConstantValue
hoặc GetRawConstantValue
) không phụ thuộc vào thời gian chạy - nó là trực tiếp từ siêu dữ liệu.
Vì vậy, chúng tôi nhận được sự khác biệt giữa GetConstantValue
và GetRawConstantValue
. Về cơ bản, sau này là hình thức trực tiếp và nguyên thủy hơn. Điều này hiển thị chủ yếu cho các thành viên enum
; ví dụ - nếu tôi đã có một:
enum Foo { A = 1, B = 2 }
...
const Foo SomeValue = Foo.B;
thì GetConstantValue
của SomeValue
là Foo.B
; tuy nhiên, số GetRawConstantValue
của SomeValue
là 2
. Cụ thể, bạn không thể sử dụng GetConstantValue
nếu bạn đang sử dụng ngữ cảnh chỉ phản chiếu, vì điều đó sẽ yêu cầu boxing giá trị cho một số Foo
mà bạn không thể thực hiện khi chỉ sử dụng tính năng phản chiếu.
Tôi không biết bạn đang cố gắng làm gì. Dù sao, nếu bạn chỉ muốn lấy giá trị của một thuộc tính bằng cách sử dụng sự phản chiếu, bạn phải sử dụng GetValue. I E. một cái gì đó như thế này:
private string _foo = "fooValue";
public string Foo
{
get { return _foo; }
set { _foo = value; }
}
public void Test()
{
PropertyInfo pi = this.GetType().GetProperty("Foo");
string v = (string)pi.GetValue(this, null);
}
Lưu ý rằng nếu bạn gọi GetConstantValue hoặc GetRawConstantValue trong ví dụ này bạn sẽ có được một InvalidOperationException, vì tài sản là không đổi.
Sự khác biệt giữa GetConstantValue và GetRawConstantValue đã được Marc giải thích một cách hoàn hảo.
- 1. Sự khác biệt giữa $ (...) và `...`
- 2. Sự khác biệt giữa. và #
- 3. Sự khác biệt giữa $ * và $ @
- 4. Sự khác biệt giữa ". +" Và ". +?"
- 5. Sự khác biệt giữa "**/* /" và "** /"?
- 6. Sự khác biệt giữa = và: =
- 7. Sự khác biệt về sự khác biệt giữa Matplotlib giữa Agg và Cairo
- 8. Sự khác biệt giữa Html.RenderAction và Html.Action
- 9. Sự khác biệt giữa cookie và phiên?
- 10. Sự khác biệt giữa '.' và "." trong java
- 11. Sự khác biệt giữa SimpleDB và S3
- 12. C++ - Sự khác biệt giữa (*). và ->?
- 13. Sự khác biệt giữa offsetHeight và clientHeight
- 14. Sự khác biệt giữa RDLC và SSRS
- 15. Sự khác biệt giữa "\ n" và Environment.NewLine
- 16. Sự khác biệt giữa qt và PyQt4
- 17. Sự khác biệt giữa AForge và OpenCV
- 18. Sự khác biệt giữa toFixed() và toPrecision()?
- 19. sự khác biệt giữa cacao và cocoatouch
- 20. Sự khác biệt giữa smtpClient.send() và smtpClient.SendAsync()?
- 21. Sự khác biệt giữa window.location.host và window.location.hostname
- 22. Sự khác biệt giữa DTLS và TLS
- 23. Sự khác biệt giữa Mealy và Moore
- 24. sự khác biệt giữa createRfcommSocketToServiceRecord và createRfcommSocket
- 25. Sự khác biệt giữa Arrays.sort() và Arrays.parallelSort()
- 26. sự khác biệt giữa orm và pdo
- 27. Sự khác biệt giữa nproc và ulimit?
- 28. Sự khác biệt giữa apc_add và apc_store?
- 29. Sự khác biệt giữa mb_substr và substr
- 30. Sự khác biệt giữa p4diff và p4diff2
Marc giải thích của bạn bao gồm 'GetRawConstantValue' cho các trường về' Properties'. Thuộc tính không thể đúng? Nếu bạn nhầm, bạn có thể hiển thị một ví dụ với 'Properties' –
@SriramSakthivel, có một vấn đề ở đó, trong đó AFAIK C# không bao gồm một cơ chế để diễn tả các thuộc tính với ngữ nghĩa không đổi. IL bao gồm nhiều thứ hơn bất kỳ ngôn ngữ riêng lẻ nào. Vì vậy, không: Tôi không tin rằng nó có thể đưa ra một ví dụ, viết ngắn IL thô. –
Tôi đoán là đúng, cảm ơn marc –