【问题标题】:Which one is better ? (Best practice) Create New class or Add extension methods in C#?哪一个更好 ? (最佳实践)在 C# 中创建新类或添加扩展方法?
【发布时间】:2015-11-13 08:13:37
【问题描述】:

我想知道编程中哪个更好

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

我有两种方法:

1 。创建一个加密类,里面有4个方法

类加密

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

2 。为String

创建4个Extension Methods
  • “ABC”.EncryptWithRijndael()
  • “XYZ”.EncryptWithTripleDES()

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

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

【问题讨论】:

  • 为它做类。因为它有它自己的逻辑。它的目的是加密和解密
  • 新的加密类。使用二进制序列化来加密/解密,就像使用 GZipStream 一样,或者可以考虑from here
  • @Kay Zed ,我对编码没有任何问题,我的问题是选择,当使用新类扩展方法时?
  • 扩展方法很难测试,所以也许你应该在它自己的类中实现这个逻辑。我确实使用了扩展方法,但我尝试仅将它们用于转换/
  • 我认为扩展方法应该与类有很强的逻辑联系。 IEnumerable 的 .net 扩展名就是很好的例子。 string 对于加密的强链接来说太通用了,即使在一个只关注它的应用程序中也是如此。如果你定义一个包含一个字符串的类,该字符串保存了专门用于加密的用户输入,那么是的。

标签: c# class oop extension-methods


【解决方案1】:

要回答您的问题,这主要是特定程序员的喜好问题。

但是

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

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

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

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

例如,让我们以 int 为例。如果您有一个 addTogether 方法,它有 3 个值,但与特定工作流的相关性不强于 int,那么它可能是 int 扩展类的候选者。否则,它将在一个名为“Calculations”的类中,并且作为普通方法存在。

【讨论】:

    【解决方案2】:

    TLDR:

    在 OOP 中,类优于扩展方法。

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

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

    此外,扩展方法不优先于实例方法。例如,您不能为string 类型编写ToString 扩展方法。好吧,你可以,但它永远不会被调用:

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

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 2011-04-08
      • 2015-06-10
      • 2010-11-16
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多