哪一个更好 ? (最佳实践)在C#中创建新类或添加扩展方法?

时间:2015-11-13 08:13:37

标签: c# class oop extension-methods

我想知道哪一个更适合编程

例如我想要Rijndael&我的项目中的TripleDES加密

我有两种方式:

1 。创建一个加密类,并在此

中有4个方法

课程加密

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

2 。为字符串

创建4个扩展方法
  • “ABC”.EncryptWithRijndael()
  • “XYZ” .EncryptWithTripleDES()

加密只是一个例子而不是我的问题 我想知道何时使用新类何时使用扩展方法用于相同目的?

哪一个在OOP中更好? (甚至两者都是),为什么?

2 个答案:

答案 0 :(得分:1)

要回答您的问题,这主要取决于特定程序员的品味。

BUT

如果您认为其他程序员也需要使用该程序来考虑它是多么容易和自我解释事情对他们而言。

如果我们把你的榜样作为基础。如果你将加密/解密添加到字符串看起来自然吗?通常我不希望字符串类有这样的方法。因此没有。

它自己的课程看起来很自然吗?在这种情况下是的。

总而言之:看看看起来很自然。自然是所有与主题相关的事物(与加密/解密相关的stronlgy只与文本本身微弱相关)都在一个类中。如果这些方法在主题链接的同时扩展了该类的功能,则它们是扩展方法的候选者。

例如,让我们采取int。如果你有一个addTogether方法,它有3个值,但与特定工作流相比并不比int更强,那么它可能是int的扩展类的候选者。否则它将在名为"计算"的类中。例如,作为一种常规方法。

答案 1 :(得分:1)

<强> TLDR:

  

在OOP中,类比扩展方法更好。

第一个原因是及其方法本身就是&#34;面向对象&#34; (OO)。你可以使用继承,多态和其他类似的东西。

扩展方法是一种静态方法。静态方法不是OO,因为您不能使用任何OO。并且线程不安全(许多线程可以访问相同的方法并返回不同的结果,或者更糟,导致死锁)。

此外,扩展方法不优先于实例方法。例如,您无法为ToString类型编写string扩展方法。嗯,你可以,但永远不会被称为:

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