Revisión básica de Unity C# 01——estática estática (P267)

1. Miembros de la clase (también llamados variables de instancia o variables de objeto):

Los miembros de la clase son modificados por la palabra clave estática y se denominan variables estáticas.

Características: Puede llamar directamente a los miembros de la clase usando el nombre de la clase antes de crear un objeto de la clase.

1. Variables de clase: campos modificados por la palabra clave estática.

Características: Pertenece a la plantilla de clase (compartida) y se puede acceder a ella directamente mediante el nombre de la clase.

NOTA: No se pueden utilizar referencias a objetos.

2. Método de clase: método modificado por palabra clave estática

Características: Pertenece a la plantilla de clase y se puede acceder a ella directamente mediante el nombre de la clase.

Nota: (1) No se puede utilizar la referencia de objeto

        (2) Esto y la base no se pueden utilizar en métodos.

 (2) Esto y la base no se pueden utilizar en métodos.

Ejemplo 1:

1. No se utiliza estática

Guión 1

public class Student : MonoBehaviour
{
    int count;
    public Student()
    {
        count++;
    }
    public int Count { get => count;  }
}

Guión 2

public class ProGram : MonoBehaviour
{
    
    void Start()
    {
        Student s1 = new Student();
        Student s2 = new Student();
        Student s3 = new Student();
        Student s4 = new Student();
        Student s5 = new Student();
        print(s5.Count);
    }
}

El resultado de salida de ProGram es  1, porque cada objeto tiene su propio recuento de campos y cada recuento de campos es 1.

2. Utilice estática

Modificar el guión 1:

public class Student : MonoBehaviour
{
    static int count;
    public Student()
    {
        count++;
    }

    public static int Count { get => count;  }
}

Modificar el guión 2:

public class ProGram : MonoBehaviour
{
    
    void Start()
    {
        Student s1 = new Student();
        Student s2 = new Student();
        Student s3 = new Student();
        Student s4 = new Student();
        Student s5 = new Student();
        print(Student.Count);
    }
}

Entonces el resultado de salida de ProGram es 5

En otras palabras, estática estática implementa cómo varios objetos comparten la misma variable.

Ejemplo 2:

1. No se utiliza estática

Guión 1:

public class Role : MonoBehaviour
{
    string[] sks;
    public Role()
    {
        sks = new string[]
        {
            "技能1","技能2"
        };
    }

    public string[] Sks { get => sks; }

    //改变技能名字
    public void ChangeSkill(int index, string newSkill)
    {
        sks[index] = newSkill;
    }
}

Guión 2:

public class ProGram : MonoBehaviour
{
    void Start()
    {
        Role r1 = new Role();
        Role r2 = new Role();
        for (int i = 0; i < r1.Sks.Length; i++)
        {
            print("r1:" + r1.Sks[i]);
            print("r2" + r2.Sks[i]);
        }
        r1.ChangeSkill(0, "左勾拳");
        r1.ChangeSkill(1, "直拳");

        for (int i = 0; i < 2; i++)
        {
            print("改变后r1:" + r1.Sks[i]);
            print("改变后r2" + r2.Sks[i]);
        }
    }
}

El resultado después de ejecutar ProGram es como se muestra en la figura.

 Se puede ver que modificamos el nombre de la habilidad en ProGram.

Se ha modificado el nombre de la habilidad 1 de r1 , pero el nombre de la habilidad 2 de r2 permanece sin cambios;

El nombre de la habilidad 2 de r1 permanece sin cambios y el nombre de la habilidad 2 de r2 se modifica.

Luego agreguemos estática y probémosla nuevamente.

Modificar el guión 1:

2. Utilice estática

public class Role : MonoBehaviour
{
    static string[] sks;
    static Role()                //静态成员应该在静态构造中初始化
    {
        sks = new string[]
        {
            "技能1","技能2"
        };
    }

    public string[] Sks { get => sks; }

    //改变技能名字
    public static void ChangeSkill(int index, string newSkill)
    {
        sks[index] = newSkill;
    }
}

Modificar el guión 2:

public class ProGram : MonoBehaviour
{
    void Start()
    {
        Role r1 = new Role();
        Role r2 = new Role();
        for (int i = 0; i < r1.Sks.Length; i++)
        {
            print("r1:" + r1.Sks[i]);
            print("r2" + r2.Sks[i]);
        }
        Role.ChangeSkill(0, "左勾拳");
        Role.ChangeSkill(1, "直拳");

        for (int i = 0; i < 2; i++)
        {
            print("改变后r1:" + r1.Sks[i]);
            print("改变后r2" + r2.Sks[i]);
        }
    }
}

El resultado después de ejecutar ProGram es como se muestra en la figura.

Se puede concluir que static static se da cuenta de la forma en que varios objetos comparten la misma variable (compartir estático)

Ilustración:

2. Estructura estática

1. La construcción estática no debe tener parámetros (nombre de clase estática(){})    

Comparación: la construcción no estática es responsable de inicializar las variables miembro

        El constructor estático es responsable de inicializar la plantilla de clase.

Características:

1. Este método existe en todas las clases.

2. No se puede llamar directamente

3. Ejecutar automáticamente cuando se usa una clase (por ejemplo, un nuevo objeto o un método de clase se ejecutará automáticamente siempre que se use)

4. Ejecutar solo una vez durante la operación.

Supongo que te gusta

Origin blog.csdn.net/weixin_46711336/article/details/122946496
Recomendado
Clasificación