Tôi đã tìm kiếm một câu trả lời cho một vấn đề tương tự và trong quá trình tôi stumbled trên này ở đây. Thực sự câu trả lời của John đã chỉ cho tôi theo hướng tôi cần phải đi. Và nó có thể giúp đỡ với câu hỏi ban đầu cũng như:
Vấn đề của tôi: tôi cần một cái gì đó mà tôi có thể sử dụng giống như một Integer
Dim myVal as Integer
myVal = 15
If myVal = 15 then
...
End If
... và vân vân ... Tuy nhiên tôi cần điều bổ sung cũng
myVal.SomeReadOnlyProperty (as String)
myVal.SomeOtherReadOnlyProperty (as Integer)
(thực sự những thuộc tính chỉ đọc có thể là phương pháp cũng ...)
vv ... vì vậy, tôi thực sự cần một Object
012.
Tôi đã nghĩ đến phương pháp khuyến nông cho Integer (@ _ @) ... Tôi không muốn đi theo con đường đó ...
Tôi cũng nghĩ đến việc viết một "ReadOnlyPropertyOracle" như là một lớp riêng biệt và cung cấp cho nó phương pháp thích
GetSomeReadOnlyProperty(ByVal pVal as Integer) as String
GetSomeOtherReadOnlyProperty(ByVal pVal as Integer) as Integer
weeeell .... Điều đó sẽ làm việc nhưng nhìn khủng khiếp ...
Vì vậy, trong đến Hack John và bình luận Brian MacKay về khai thác: Kết hợp cả hai, mở rộng/thu hẹp chuyển đổi toán tử (để gán) và toán hạng so sánh rs cho ... cũng so sánh. Dưới đây là một phần của mã của tôi và nó làm những gì tôi cần:
'The first two give me the assignment operator like John suggested
Public Shared Widening Operator CType(ByVal val As Integer) As MySpecialIntType
Return New MySpecialIntType(val)
End Operator
'As opposed to John's suggestion I think this should be Narrowing?
Public Shared Narrowing Operator CType(ByVal val As MySpecialIntType) As Integer
Return val.Value
End Operator
'These two give me the comparison operator
'other operators can be added as needed
Public Shared Operator =(ByVal pSpecialTypeParameter As MySpecialIntType, ByVal pInt As Integer) As Boolean
Return pSpecialTypeParameter.Value = pInt
End Operator
Public Shared Operator <>(ByVal pSpecialTypeParameter As MySpecialIntType, ByVal pInt As Integer) As Boolean
Return pSpecialTypeParameter.Value <> pInt
End Operator
Vâng, đây vẫn sẽ là 1-2 chục một dòng định nghĩa toán tử nhưng hầu hết trong số đó là tầm thường với rất ít chỗ cho sai sót ;-) Vì vậy, điều này làm việc cho tôi ...
Nhận xét thú vị. Nó không giải quyết vấn đề của tôi, nhưng ít nhất nó mang lại cho tôi một số nền tảng về tình hình - cảm ơn! –
Nếu nó không trả lời câu hỏi của bạn tại sao bạn đánh dấu nó là câu trả lời đúng? –
Vì câu trả lời cho vấn đề của tôi là: bạn không thể làm được. Anh chàng này cung cấp giải thích tốt nhất về lý do tại sao nó không hoạt động. –