我有一个包含一些功能的类,这些功能实际上只是客户端代码可以使用其他公共(public)访问器属性/方法自行完成的“辅助”方法,我不确定是否应该将这些定义为属性将实例作为参数的 getter、实例方法或静态方法。此外,我还从类中提取了一个接口(interface),该类几乎在构造时无处不在,以允许我的代码使用针对该接口(interface)实现的任何类。
问题是,从设计的角度来看,哪个最好?例如,作为从此类获取初始值的一种方式:
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 实现的人编写自己的实现,实例方法也是如此。
静态方法意味着实现类不需要自己写,我的代码可以保证初始是如何根据名称确定的,但这意味着它不能在接口(interface)上,客户端代码是更详细一点。
是否仅归结为允许实现类指定如何计算辅助方法是否是个好主意?
编辑:除此之外,为什么不让我添加最佳实践标签?
最佳答案
扩展方法怎么样?
namespace IPersonExtensions
{
public static class IPersonExtensionClass
{
public static string Initial(this IPerson @this)
{
return @this.name.Substring(0, 1);
}
}
}
像这样使用它:
string initial = person.Initial();
这样,您就可以共享实现,而无需继承或重写代码。使用单独的命名空间使用户可以选择是否要使用此代码。
关于c# - C# : Static or non-static? 中的辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3604137/