[英]Which one is better ? (Best practice) Create New class or Add extension methods in C#?
我想知道哪個編程更好
例如,我想在我的項目中使用Rijndael和TripleDES加密
我有兩種方法:
1 。 創建一個加密類,並在其中有4種方法
類加密
2 。 為String類創建4個擴展方法
加密只是一個例子,不是我想知道的問題。何時使用新類?何時出於相同目的使用擴展方法?
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.