c#扩展方法 - 添加一个无效方法
问题描述:
扩展方法当然可用于将方法添加到您不属于的类。c#扩展方法 - 添加一个无效方法
但我想在Visual Studio中练习这个概念,但不确定所需的符号。
例如,我有下面的类
public static class Dog
{
public static void Bark()
{
Console.WriteLine("Woof!");
}
}
假设我并不拥有这个方法(这是我做的,但让我们假装我不知道)。我如何着手使用一种新方法(本质上是void)来扩展这个类,这个方法叫做Jump,其中所有的新方法都会在控制台上打印Dog跳转的内容。
我试图这样使用补充:
public static class SomeOtherClass
{
//extension method to the Dog class
public static Dog Jump(this Dog)
{
Console.WriteLine("Dog Jumped");
}
}
不过,我得到错误:
“狗:静态类型不能用作参数”
和
“Dog:静态类型不能用作退货类型“
你能帮我解决这个问题吗?
答
你需要让你的Dog
类非静态和参数添加到Jump
并返回它:
public class Dog { ... }
public static class SomeOtherClass
{
//extension method to the Dog class
public static Dog Jump(this Dog dog)
{
Console.WriteLine("Dog Jumped");
return dog;
}
}
答
有一些问题:
- 如果你想不返回任何内容的方法,请不要写出返回的方法
Dog
:
public static Dog Jump(this Dog)
--------------^^^
public static void Jump(this Dog)
- 你
Dog
类型的参数没有名称: -
最重要的是:
扩展方法只是某种“语法糖”,因此您可以编写myDog.Jump();
而不是SomeOtherClass.Jump(myDog);
。
这意味着您需要传递给扩展方法的类的实例。您不能在类别(例如Dog.Jump();
)上调用扩展方法,但只能在对象(例如myDog.Jump();
)上调用扩展方法。这就是扩展方法的工作原理。
此外,你的类Dog
是静态的,这意味着你不能创建它的一个实例,所以你将无法调用Dog myDog = new Dog();
,因此将无法调用它的扩展方法。
public static void Jump(this Dog)
------------------------------^^^
public static void Jump(this Dog dog)
“我得到一个错误”从来没有说过有用的东西。是*具体* - 你收到什么错误? –
另外,你说过你想添加一个void方法 - 那么为什么在你尝试定义一个返回'Dog'的方法呢? –
我得到的错误是“狗:静态类型不能用作参数” –