扩展方法当然有用于将方法添加到您不拥有的类.
但我想在Visual Studio中练习这个概念,但不确定所需的符号.
例如,我有以下课程
public static class Dog { public static void Bark() { Console.WriteLine("Woof!"); } }
让我们假设我不拥有这种方法(我这样做,但让我假装不这样做).我如何使用名为Jump的新方法(在本质上为void)扩展类,其中所有新方法都将打印到Dog跳跃的控制台?
我试图使用以下方法添加:
public static class SomeOtherClass { //extension method to the Dog class public static Dog Jump(this Dog) { Console.WriteLine("Dog Jumped"); } }
但是,我收到错误:
"狗:静态类型不能用作参数"
和
"狗:静态类型不能用作返回类型"
你能帮我解决一下这个问题吗?
有一些问题:
如果您想要一个不返回任何内容的方法,请不要编写一个返回以下内容的方法Dog
:
public static Dog Jump(this Dog) --------------^^^ public static void Jump(this Dog)
您的类型参数Dog
没有名称:
public static void Jump(this Dog) ------------------------------^^^ public static void Jump(this Dog dog)
最重要的是:
扩展方法只是某种"语法糖",所以你可以写myDog.Jump();
而不是SomeOtherClass.Jump(myDog);
.
这意味着您需要传递给扩展方法的类的实例.您不能在类(例如Dog.Jump();
)上调用扩展方法,而只能在对象(例如myDog.Jump();
)上调用.这就是扩展方法的工作原理.
此外,您的类Dog
是静态的,这意味着您无法创建它的实例,因此您将无法调用Dog myDog = new Dog();
,因此无法在其上调用扩展方法.