Man*_*ake 32 c# extension-methods
在Object类上使用扩展方法是个好主意吗?
我想知道是否通过注册此方法,如果您因为将加载到上下文中加载的每个对象而导致性能损失.
And*_*zub 34
除了另一个答案:
因为扩展方法是编译器功能,所以不会有性能损失.考虑以下代码:
public static class MyExtensions
{
public static void MyMethod(this object) { ... }
}
object obj = new object();
obj.MyMethod();
Run Code Online (Sandbox Code Playgroud)
调用MyMethod将实际编译为:
MyExtensions.MyMethod(obj);
Run Code Online (Sandbox Code Playgroud)
Dar*_*opp 12
没有性能损失,因为它没有附加到系统中的每个类型,它只能在系统中的任何类型上调用.所有将要发生的是该方法将显示在intellisense中的每个对象上.
问题是:你真的需要它在对象上,还是更具体.如果需要在对象上,则将其设为对象.
如果您确实打算扩展每个对象,那么这样做是正确的。但是,如果您的扩展实际上仅适用于对象的子集,则应将其应用于必要的最高层次结构级别,但仅此而已。
此外,该方法仅在导入命名空间的情况下可用。
我已经扩展Object了一个尝试转换为指定类型的方法:
public static T TryCast<T>(this object input)
{
bool success;
return TryCast<T>(input, out success);
}
Run Code Online (Sandbox Code Playgroud)
我还重载了它以接受successbool (就像TryParse那样):
public static T TryCast<T>(this object input, out bool success)
{
success = true;
if(input is T)
return (T)input;
success = false;
return default(T);
}
Run Code Online (Sandbox Code Playgroud)
此后,我将其扩展为也尝试解析input(通过使用ToString和使用转换器),但这变得更加复杂。