Что не так с моей реализацией методов расширения: c # - PullRequest
1 голос
/ 31 октября 2009

источник выдает ошибку:

'nn.asdf' does not contain a definition for 'extension_testmethod'

и я действительно не понимаю, почему ...

using System.Linq;
using System.Text;
using System;

namespace nn
{
    public class asdf
    {
        public void testmethod()
        {
        }
    }
}
namespace nn_extension
{
    using nn;
    //Extension methods must be defined in a static class
    public static class asdf_extension
    {
        // This is the extension method.
        public static void extension_testmethod(this asdf str)
        {
        }
    }
}
namespace Extension_Methods_Simple
{
    //Import the extension method namespace.
    using nn;
    using nn_extension;
    class Program
    {
        static void Main(string[] args)
        {
            asdf.extension_testmethod();
        }
    }
}

есть идеи?

Ответы [ 2 ]

6 голосов
/ 31 октября 2009

Метод расширения - это статический метод, который ведет себя как метод экземпляра для расширяемого типа , то есть его можно вызывать для экземпляра объекта типа asdf. Вы не можете назвать его так, как если бы это был статический метод типа extended .

Измените Main на:

asdf a = new asdf();
a.extension_testmethod();

Конечно, вы всегда можете вызвать как простой static метод без расширения типа , который объявляет тип (asdf_extension):

asdf_extension.extension_testmethod(null);
1 голос
/ 31 октября 2009

Методы расширения применяются к экземплярам класса:

var instance = new asdf();
instance.extension_testmethod();
...