簡體   English   中英

無法在C#中向抽象類添加擴展方法

[英]Can't add extension method to an abstract class in C#

我有一節課:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM