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

本文关键字:新类 创建 添加 方法 扩展 更好 最佳 哪一个 | 更新日期: 2023-09-27 18:21:42

我想知道哪一个在编程方面更好

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

我有两种方法:

1。创建一个加密类并在这个中有4个方法

类加密

  • .使用Rijndael加密()
  • .使用Rijndael解密()
  • .IncryptWithTripleDES()
  • .DecryptWithTripleDES()

2。为String类创建4个扩展方法

  • "ABC".EncryptWithRijndael()
  • "XYZ"。用TripleDES加密()

加密只是一个例子而不是我的问题我想知道什么时候使用一个新类什么时候使用扩展方法达到同样的目的?

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

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

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

但是

如果你认为其他程序员也需要使用这个程序,想想它对他们来说是多么容易和自我解释。

如果我们以你的例子为基础。如果在字符串中添加加密/解密,这看起来自然吗?通常我不会期望字符串类有这样的方法。因此没有

它自己的阶级看起来自然吗?在这种情况下是的。

因此,总结一下:看看什么看起来很自然。自然的是,所有在主题上相关的东西(由于加密/解密与文本本身仅弱相关,因此与字符串相关)都在一个类中。如果这些方法在主题链接的同时扩展了该类的功能,那么它们就是扩展方法的候选者。

举个例子,让我们以int为例。如果你有一个addTogether方法,它有3个值,但与特定工作流的相关性并不比与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...";
}