我的实现有什么问题:c#扩展方法

时间:2009-10-31 10:31:30

标签: c# .net extension-methods

来源正在抛出错误:

'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 个答案:

答案 0 :(得分:6)

扩展方法是一种静态方法,其行为类似于要扩展的类型的实例方法,也就是说,您可以在类型为asdf的对象的实例上调用它。您无法将其称为扩展类型的静态方法。

将您的Main更改为:

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

当然,您总是可以像声明类型(static)的简单asdf_extension非扩展方法一样调用:

asdf_extension.extension_testmethod(null);

答案 1 :(得分:1)

扩展方法适用于类实例:

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