对象的扩展方法但未派生 类
Extension methods for Object but not derived classes
可以为 Object 创建一个扩展方法,但不能在任何派生上使用它 class?
需要一些通用实用程序将对象转换为处理常见异常的特定类型。 Ej。将对象转换为字符串但将 null 更改为空字符串并修剪空格的方法。
object obj = ...
// I want to use de the method when the object is 'casted' as 'object':
string strValue = obj.ToStringTrim();
// But not be able to use it in any subclass. Ej. en this string:
strValue.ToStringTrim();
我知道这是一个棘手的语法糖,我想答案是否定的,我应该为这种转换制作一个自定义实用程序 class,但只是好奇它是否可能...
编辑
我知道这不利于继承,但我只是想要一个 hack、语法糖或其他...并且已经存在于 C# 中;)。而且,为什么这是一个问题?好吧,这不是真正的问题,但我不想让自动完成功能变得如此臃肿
不,那不可能,因为那不是继承的工作方式。字符串是一个对象。时期!
但为什么这是一个问题?如果您不想,请不要将此扩展名与字符串一起使用。
但是,扩展方法可以实现为:
public static string ToStringTrim(this Object obj)
{
return obj?.ToString().Trim() ?? "";
}
如果 obj
已经是 string
那么这是一个空操作,因为 String.ToString
被实现为 return this
.
可以为 Object 创建一个扩展方法,但不能在任何派生上使用它 class?
需要一些通用实用程序将对象转换为处理常见异常的特定类型。 Ej。将对象转换为字符串但将 null 更改为空字符串并修剪空格的方法。
object obj = ...
// I want to use de the method when the object is 'casted' as 'object':
string strValue = obj.ToStringTrim();
// But not be able to use it in any subclass. Ej. en this string:
strValue.ToStringTrim();
我知道这是一个棘手的语法糖,我想答案是否定的,我应该为这种转换制作一个自定义实用程序 class,但只是好奇它是否可能...
编辑
我知道这不利于继承,但我只是想要一个 hack、语法糖或其他...并且已经存在于 C# 中;)。而且,为什么这是一个问题?好吧,这不是真正的问题,但我不想让自动完成功能变得如此臃肿
不,那不可能,因为那不是继承的工作方式。字符串是一个对象。时期! 但为什么这是一个问题?如果您不想,请不要将此扩展名与字符串一起使用。
但是,扩展方法可以实现为:
public static string ToStringTrim(this Object obj)
{
return obj?.ToString().Trim() ?? "";
}
如果 obj
已经是 string
那么这是一个空操作,因为 String.ToString
被实现为 return this
.