可以';t在C#中为抽象类添加扩展方法
本文关键字:抽象类 添加 扩展 方法 可以 | 更新日期: 2023-09-27 18:21:42
我有一个类:
namespace MyNamespace
{
public abstract class Class1
{
public static string X()
{
return "Greetings from a method.";
}
}
}
以及一种扩展方法:
namespace MyNamespace
{
public static class Class1Extension
{
public static string Y(this Class1 c1)
{
return "Greetings from extension method.";
}
}
}
当我试图访问扩展方法时,编译器会给我这个错误:
'MyNamespace.Class1' does not contain a definition for 'Y'
以下是我的使用方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using MyNamespace;
namespace Test_Console
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Class1.X());
Console.WriteLine(Class1.Y());
Console.ReadLine();
}
}
}
您正试图调用这样的扩展方法:
Class1.Y();
这行不通。扩展方法总是在实例上操作,而不是在类本身上操作:
var c = new Class1Impl(); // derived from Class1
c.Y();
换句话说:
扩展方法是在不实际更改现有类的情况下,将实例方法添加到类层次结构中的一种方法
不能使用它们将静态方法添加到类中。事实上,除了简单地将静态方法直接添加到类的传统方式之外,C#中没有任何机制允许将静态方法添加到类中。
扩展方法实际上只是语法上的糖
编译器将上述代码更改为以下代码:
Class1Extension.Y(c);