簡體   English   中英

哪一個更好 ? (最佳實踐)在C#中創建New類還是添加擴展方法?

[英]Which one is better ? (Best practice) Create New class or Add extension methods in C#?

我想知道哪個編程更好

例如,我想在我的項目中使用Rijndael和TripleDES加密

我有兩種方法:

1 創建一個加密類,並在其中有4種方法

類加密

  • .EncryptWithRijndael()
  • .DecryptWithRijndael()
  • .EncryptWithTripleDES()
  • .DecryptWithTripleDES()

2 String類創建4個擴展方法

  • “ABC” .EncryptWithRijndael()
  • “XYZ” .EncryptWithTripleDES()

加密只是一個例子,不是我想知道的問題。何時使用新類?何時出於相同目的使用擴展方法?

OOP中哪一個更好? (或什至兩者),為什么?

回答您的問題主要是特定程序員的喜好問題。

如果您認為其他程序員也需要使用該程序,請考慮一下它對他們來說是多么容易和自我解釋。

如果我們以您的示例為基礎。 如果將加密/解密添加到字符串,看起來自然嗎? 通常,我不希望字符串類具有這種方法。 因此沒有。

它自己的班級看起來自然嗎? 在這種情況下,是的。

總結一下:看什么看起來自然。 自然而然的是,所有與主題相關的事物(與加密/解密僅緊密相關的文本本身與星形相關)都在同一類中。 並且,如果這些方法在主題鏈接時擴展了該類的功能,則它們是擴展方法的候選對象。

例如,以int為例。 如果您有一個具有3個值的addTogether方法,但與特定工作流程的關聯性不強於int,則該方法可能是int擴展類的候選者。 否則,它將例如在名為“ Calculations”的類中,並且作為常規方法存在。

TLDR:

在OOP中,類比擴展方法要好。

第一個原因是及其方法本身是“面向對象的”(OO)。 您可以使用繼承,多態和其他類似OO的東西。

擴展方法是靜態方法。 靜態方法不是OO,因為您不能使用任何OO東西。 而且這是線程不安全的(許多線程可以訪問相同的方法並返回不同的結果,或者更糟的是,導致死鎖)。

此外,擴展方法不優先於實例方法。 例如,您不能為string類型編寫ToString擴展方法。 好吧,可以,但是永遠不會被稱為:

public static string ToString(this string input)
{
    return input + " whatever you want to do...";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM