Проблема вызова метода расширения в ViewPage - PullRequest
0 голосов
/ 15 апреля 2011

Я создал следующий метод расширения для ViewPage:

using System.Web.Mvc;

namespace G3Site {
    public static class ViewPage_Extensions {
        public static void Test(this ViewPage vp) {
            vp.Writer.Write("this is a test");
        }
    }
}

Затем я помещаю оператор импорта на мою страницу aspx

<%@ Import Namespace="G3Site" %>

Я могу вызвать метод Test () через this просто отлично:

<% this.Test(); %>

Но когда я пытаюсь вызвать его без ссылки на , это :

<% Test(); %>

Я получаю ошибку компилятора:

CS0103: The name 'Test' does not exist in the current context

Кто-нибудь знает, почему это происходит, и есть ли способ обойти это?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2011

Это не просто ограничение представления ASP.Net MVC, это общее правило для методов расширения в C #:

public class SomeClass
{
    public void Method()
    {
        ExtensionMethod();
    }
}

public static class Extensions
{
    public static void ExtensionMethod(this SomeClass sc) { }
}

Это не скомпилируется, поскольку компилятору C # требуется метод расширениябыть вызванным с использованием экземпляра.Почему это решение так, вероятно, из-за какого-то углового случая только Эрик Липперт может придумать:)

0 голосов
/ 15 апреля 2011

Требуется, чтобы компилятор C # вызывал методы расширения 'off' выражения (например, переменной или ссылки на объект) в соответствии со спецификацией языка C # (раздел 7.6.5.2).

...