![](/img/trans.png)
[英]Does += operator ensures an EXPLICIT conversion or implicit CASTING in C#?
[英]Is creating an explicit or implicit operator for a SecureString to string conversion possible?
我已經對各種轉換方法進行了一些研究,並且已經使用了explicit
或implicit operators
。
注意到System.Security.SecureString
是一個sealed
類(它不能繼承),是否可以編寫一個能夠在System.Security.SecureString
和System.String
之間進行轉換的explicit
或implicit operator
(利用這里描述的方法)。
例如,我知道你必須在被轉換對象的(部分)類中編寫operator
。 因此,我認為最好的方法是繼承類,並編寫必要的operators
。
是否有可能a)使用System.Security.SecureString
的explicit
或implicit operator
轉換為System.String
,b)執行類sealed
的類對象的轉換?
如果沒有,除了使用類方法之外還有另一種方法可以執行轉換嗎?
假設我是微軟產品的消費者,請提供實用的答案。
注意到
System.Security.SecureString
是一個密封類,是否可以編寫一個能夠在System.Security.SecureString
和System.String
之間執行轉換的顯式或隱式運算符?
是的, 如果您是基類庫團隊的成員,您可以這樣做。 當然,這樣做是個壞主意。
如果您不是BCL團隊的成員,那么沒有。 您需要能夠更改兩個類之一的源代碼。
正如其他地方所討論的那樣,對原始問題的簡單回答是否定的,不可能在SecureString中添加運算符來執行任何密封操作。
“(b)對班級密封的班級對象進行轉換”的答案更為復雜。
你可以做的是創建自己的struct
,例如稱為EncryptedString,它將SecureString
作為private
字段。 然后,您可以自由地將任何SecureString
< - > string
轉換和比較運算符和方法添加到該struct
以滿足您的需求。 嚴格來說,這不是執行類對象的轉換,而是組成一種新type
來滿足您的需求。 俗話說“構圖而不是繼承”(參見http://en.wikipedia.org/wiki/Composition_over_inheritance ),實際上這種方法既滿足了你的需求又被視為OO“最佳實踐”。
現在免責聲明:
SecureString
的重點在於,與string
不同,它是安全的。 如果您開始將SecureString
轉換為string
(或允許從string
創建SecureString
),您將破壞該類的整個點。
因此,如果您需要進行比較,請使用Marshal.SecureStringToBSTR()
和Marshal.StringToBSTR()
將兩者轉換為BSTR structures
,比較它們,擦除內存並釋放它,或者使用一些類似的機制來最小化損害SecureStrings
安全性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.