«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему статический метод не может получить доступ к нестатическим членам в C#?

Почему статический метод не может получить доступ к нестатическим членам в C#?

Опубликовано в 2025-03-24
Просматривать:193

ошибка и решение для статического метода C# не могут получить доступ к нестатическим членам

]

Why Can't a Static Method Access Non-Static Members in C#?

error: требуется ссылка на объект

]]

] Следующий фрагмент кода демонстрирует эту проблему:

]
namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        ...

        private static void SumData(object state)
        {
            ...
            setTextboxText(result); // 错误:非静态字段、方法或属性
        }
    }
}

причина проблемы

]]

Сообщение об ошибке указывает, что статический метод sumdata пытается вызвать нестатический член setTextboxtext . Статический метод может только получить доступ только к статическим членам, в то время как доступ к нестатическим членам требует ссылки на объект класса, к которому он принадлежит.

]

solutions

]

есть несколько способов исправить эту ошибку:

]
    ]
  1. установить метод setTextboxtext для static:
]
public static void setTextboxText(int result)
]]

, однако, если метод setTextboxText требует доступа к переменной экземпляра, его нельзя установить на статический.

]
    ]
  1. Static Singleton Call setTextboxtext : ]]
  2. ]
класс Form1 { Общественный статический экземпляр1; ... Частная статическая void sumdata (состояние объекта) { ... Exante.settextboxtext (result); } }
class Form1
{
    public static Form1 Instance;   // 单例

    ...

    private static void SumData(object state)
    {
        ...
        Instance.setTextboxText(result);
    }
}
form1

, exant должен быть установлен в текущий экземпляр: exante = this; . ] ]

    создать
  1. form1 в методе вызова: ] ]
private void sumdata (состояние объекта) { ... Form1 frm1 = new form1 (); frm1.settextboxtext (результат); }
private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}
form1

уже существует, этот метод не может работать. ] ]

    sumdata
  1. Установите метод вызова sumdata как метод нестатического экземпляра (принадлежит form1 : ]
  2. ]
private void SumData(object state)
{
    ...
    setTextboxText(result);
}
это обычно лучшее решение, потому что оно сохраняет инкапсуляцию кода и обслуживаемость.

]

для получения дополнительной информации, пожалуйста, обратитесь к документации MSDN.

]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3