Maison >développement back-end >C++ >Pourquoi une méthode statique ne peut-elle pas accès aux membres non statiques en C #?

Pourquoi une méthode statique ne peut-elle pas accès aux membres non statiques en C #?

Susan Sarandon
Susan Sarandonoriginal
2025-02-02 17:46:09247parcourir

C # La méthode statique ne peut pas accéder aux erreurs et solutions des membres non statiques

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

Erreur: l'objet est référencé

Le fragment de code suivant démontre ce problème:

La cause du problème
<code class="language-csharp">namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        ...

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

Les informations d'erreur montrent que les méthodes statiques essaient d'appeler les membres non statiques

. Les méthodes statiques ne peuvent accéder qu'à des membres statiques, et les membres non statiques ont besoin d'une référence aux objets qui appartiennent.

SumData Solution setTextboxText

Il existe de nombreuses façons de résoudre cette erreur:

Définissez la méthode

comme statique:

  1. setTextboxText Cependant, si la méthode doit accéder aux variables d'instance, elle ne peut pas être définie sur statique.
Appelez
<code class="language-csharp">public static void setTextboxText(int result)</code>
:

setTextboxText

  1. Dans le constructeur , définissez à l'instance actuelle: Form1. setTextboxText
  2. Créer une instance
dans la méthode d'appel:
<code class="language-csharp">class Form1
{
    public static Form1 Instance;   // 单例

    ...

    private static void SumData(object state)
    {
        ...
        Instance.setTextboxText(result);
    }
}</code>

Form1 Instance Instance = this; Si l'instance existe déjà, cette méthode peut ne pas être applicable.

  1. La méthode d'appel est définie sur la méthode d'instance non statique (appartient à Form1):
<code class="language-csharp">private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}</code>

Il s'agit généralement de la meilleure solution car elle maintient l'encapsulation et la maintenance du code. Form1

Pour plus d'informations, veuillez vous référer au document MSDN.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn