Ошибка периода выполнения ASP.NET: Неоднозначное Соответствие найдено

  1. статическая переменная А в функции сохраняет свое значение между вызовами.
  2. А статическая глобальная переменная или функция "замечены" только в файле, которым это объявляется в
  3. (1), более внешняя тема, если Вы - новичок, таким образом, вот пример:

    #include 
    
    void foo()
    {
        int a = 10;
        static int sa = 10;
    
        a += 5;
        sa += 5;
    
        printf("a = %d, sa = %d\n", a, sa);
    }
    
    
    int main()
    {
        int i;
    
        for (i = 0; i < 10; ++i)
            foo();
    }
    

    Это печатает:

    a = 15, sa = 15
    a = 15, sa = 20
    a = 15, sa = 25
    a = 15, sa = 30
    a = 15, sa = 35
    a = 15, sa = 40
    a = 15, sa = 45
    a = 15, sa = 50
    a = 15, sa = 55
    a = 15, sa = 60
    

    Это полезно для случаев, где функция должна сохранить некоторое состояние между вызовами, и Вы не хотите использовать глобальные переменные. Остерегайтесь, однако, эта функция должна быть использована очень экономно - она делает Ваш код не ориентированным на многопотоковое исполнение и более твердым понять.

    (2) используется широко в качестве функции "управления доступом". Если у Вас есть.c файл, реализовывая некоторую функциональность, это обычно выставляет только несколько "общедоступных" функций пользователям. Остальная часть его функций должна быть сделана static, так, чтобы пользователь не мог получить доступ к ним. Это - инкапсуляция, хорошая практика.

    Заключение в кавычки Википедия :

    На языке программирования C, статичном, используется с глобальными переменными и функциями для установки их объема на содержание файла. В локальных переменных, статичных, используется для хранения переменной в статически выделенной памяти вместо автоматически выделенной памяти. В то время как язык не диктует реализацию ни одного типа памяти, статически выделенная память обычно резервируется в сегменте данных программы во время компиляции, в то время как автоматически выделенная память обычно реализуется как стопка устанавливающегося вызова.

    См. здесь и здесь для получения дополнительной информации.

    И отвечать на Ваш второй вопрос, это не похоже в C#.

    В C++, однако, static также используется для определения атрибутов класса (совместно использованный всеми объектами того же класса) и методы. В C нет никаких классов, таким образом, эта функция не важна.

19
задан CRABOLO 21 March 2015 в 19:16
поделиться

4 ответа

Может появилось из-за разных названий компонентов? например, Button1 и button1, он компилируется с учетом регистра, но выполняется без учета регистра.

40
ответ дан 30 November 2019 в 02:22
поделиться

В вашем ASCX-файле просмотрите каждый элемент управления и измените его идентификатор. Например,

<asp:TextBox id="foo" />

измените его на

<asp:TextBox id="foo1" >

. Вероятно, у вас есть элемент управления с идентификатором, который соответствует свойству в вашем ascx-файле, поэтому, когда компилятор пытается заставить переменные экземпляра конфликтовать.

12
ответ дан 30 November 2019 в 02:22
поделиться

Я бы просмотрел ваш web.config на предмет ссылок 1.1 и 2.0 на одну и ту же DLL. В большинстве случаев, когда я получал это, это был System.Web.Extensions.

Также проверьте @registers в Pages, если это не удается.

Удачи (найти эту ошибку не очень весело!)

Дэн

0
ответ дан 30 November 2019 в 02:22
поделиться

This is due to what can only be described as a defect in System.Web.UI.Util.GetNonPrivateFieldType(Type classType, String fieldName) that allows UI (.aspx/.ascx) fields to compile as case-insensitive but attempts to retrieve them as case-sensitive during the intial parse.

A potential remedy for the time being is to catch it at compile-time with an ms-build task.

-1
ответ дан 30 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: