C#创建扩展方法
您好,我想为C#创建扩展方法,c#,char,C#,Char,您好,我想为Char类创建一个扩展方法,它作为Char.IsDigit()方法工作(当然,它会识别不同类型的字符)。 我写道: namespace CharExtensions { public static class CompilerCharExtension { public static Boolean IsAddOp(this Char c) { return c.Equals('+') || c.Equals('
Char
类创建一个扩展方法,它作为Char.IsDigit()
方法工作(当然,它会识别不同类型的字符)。
我写道:
namespace CharExtensions
{
public static class CompilerCharExtension
{
public static Boolean IsAddOp(this Char c)
{
return c.Equals('+') || c.Equals('-');
}
}
}
这很好,但这并不完全是我的意思。
此扩展应按以下方式使用:
using CharExtensions;
char x:
...
if(x.IsAddOp())
Console.WriteLine("Add op found");
我想说的是:
using CharExtensions;
char x;
...
if(Char.IsAddOp(x))
Console.WriteLine("Add op found");
感谢所有能帮助我的人。你不能这样做,因为扩展方法总是需要对象的实例。 看 扩展方法定义为静态方法,但使用实例方法语法调用
您不能这样做,因为扩展方法总是需要对象的实例。 看 扩展方法定义为静态方法,但使用实例方法语法调用
您的问题提到要触发一个类的静态方法。实际上,您希望为
Char
类定义一个静态方法,而不是向Char
实例添加扩展。要定义静态方法,必须访问原始类
现在您可以使用StaticMethod
作为:
SomeClass.StaticMethod();
然后,您必须访问Microsoft.net framework代码才能将
IsAddOp(x)
方法添加到Char
类。实际上,你用你所说的扩展来定义扩展的方法是错误的。。您没有尝试定义扩展
方法..您尝试定义静态
方法。您的问题提到启动类的静态方法。实际上,您希望为Char
类定义一个静态方法,而不是向Char
实例添加扩展。要定义静态方法,必须访问原始类
现在您可以使用StaticMethod
作为:
SomeClass.StaticMethod();
然后,您必须访问Microsoft.net framework代码才能将
IsAddOp(x)
方法添加到Char
类。实际上,你用你所说的扩展来定义扩展的方法是错误的。。您不尝试定义扩展
方法。您尝试定义静态
方法。您不能这样做,如果可以的话,这将是非常糟糕的做法。你为什么要这么做?只需创建一个普通方法,并像这样调用它:IsAddOp(x)
@DavidG只需创建一个普通方法是好的,但如果可以定义扩展方法,那么最好将其用于developer@combo_ci对char
的扩展以什么方式更好?@DavidG不,我说使用扩展方法比使用普通方法更好,但问题是要向.Net基类添加一个我认为不是的函数possible@combo_ci实际上,向基本框架类型添加扩展也被认为是非常糟糕的形式。你不能这样做,如果可以的话,那将是非常糟糕的做法。你为什么要这么做?只需创建一个普通方法,并像这样调用它:IsAddOp(x)
@DavidG只需创建一个普通方法是好的,但如果可以定义扩展方法,那么最好将其用于developer@combo_ci对char
的扩展以什么方式更好?@DavidG不,我说使用扩展方法比使用普通方法更好,但问题是要向.Net基类添加一个我认为不是的函数possible@combo_ci实际上,向基本框架类型添加扩展也被认为是非常糟糕的形式。从技术上讲,它们不需要实例。他们只需要一个正确类型的变量;无论该值是否为null
都与能否调用该方法无关(尽管大多数扩展方法都需要它)。@Joey从技术上讲,您也不需要变量。您只需要一个具有正确编译时类型的表达式。例如((IEnumerable)null).First()代码>从技术上讲,它们不需要实例。他们只需要一个正确类型的变量;无论该值是否为null
都与能否调用该方法无关(尽管大多数扩展方法都需要它)。@Joey从技术上讲,您也不需要变量。您只需要一个具有正确编译时类型的表达式。例如((IEnumerable)null).First()这不是我的意思。这不是我的意思。