C# 中的辅助方法:静态还是非静态?

2024-04-16

我有一个包含一些函数的类,这些函数实际上只是客户端代码可以使用其他公共访问器属性/方法自行完成的“帮助器”方法,并且我尚未决定是否应该使用 getter、实例将它们定义为属性方法,或将实例作为参数的静态方法。此外,我还从类中提取了一个接口,除了构造之外,该接口几乎在任何地方都使用,以允许我的代码使用针对该接口实现的任何类。

问题是,从设计的角度来看,哪一个最好?例如,作为从此类获取首字母的一种方法:

class Person : IPerson {
  private string name;

  public string Name { get { return this.name; } }

  // Property with getter
  public string Initial { get { return this.name.Substring(0,1); } }

  // Instance method
  public string GetInitial { return this.name.Substring(0,1); }

  // Static method
  public static string GetInitial(IPerson person) {
    return person.Name.Substring(0,1);
  }
}

该属性适合于更短、更易读的客户端代码,但需要任何针对 IPerson 实现的人编写自己的实现,实例方法也是如此。

静态方法意味着实现类不需要编写自己的类,并且我的代码可以保证如何根据名称确定初始值,但这意味着它不能在接口上,并且客户端代码更加冗长。

这是否只是归结为允许实现类指定辅助方法的计算方式是否是一个好主意?

编辑:撇开小事不谈,为什么不让我添加最佳实践标签?


扩展方法怎么样?

namespace IPersonExtensions
{
    public static class IPersonExtensionClass
    {
        public static string Initial(this IPerson @this)
        {
            return @this.name.Substring(0, 1);
        }
    }
}

像这样使用它:

string initial = person.Initial();

这样,您就可以共享实现,而无需继承或重写代码。使用单独的命名空间使用户可以选择是否要使用此代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的辅助方法:静态还是非静态? 的相关文章

随机推荐