Zmienna bez przypisania do klasy

0

Cześć

Mam pytanie dotyczące takiego prostego kodu:

public enum ItemType
{
    Food,
    Equipment,
    Default
}

public abstract class ItemObject : ScriptableObject
{
    public GameObject prefab;
    public ItemType type;
    [TextArea(15,20)] public string description;
}
public class FoodObject : ItemObject
{
    public void Awake()
    {
        type = ItemType.Food;
    }
}

Chodzi mi o zmienną **type **użytą w klasie **FoodObject **. Jest to zmienna nie statyczna w takiej samej metodzie. Używam jej w silniku Unity 3D ale chciałem zrozumieć do czego ona jest przypisana, do jakiego obiektu?

Tutaj podam podobny przykład bez użycia Unity 3D:

    class Wyswietlacz1 : Dziedziczenie
    {
        static void Main()
        {

        }
        public void Testowa()
        {
            z = 10;
            Console.WriteLine(z);
        }
    }
}
namespace KursCszarp
{
    class Dziedziczenie : Punkt2
    {
        public int z { get; set; }
    }
}

Jeżeli chciał bym wyświetlić wartość zmiennej z w metodzie Main to muszę ją przypisać do obiektu (np. klasy Wyswietlacz1)?
Na tą chwilę nie jest przypisana do żadnego obiektu?

I jak się to ma do przykładu z Unity 3D, z jakim obiektem jest związana zmienna type?

EDIT: Rozumiem, że jest związana z klasąItemObject ale nie jest powiązana z żadną zmienną referencyjną. Dziwię się, że mogę z niej korzystać w silniku Unity 3D - w odniesieniu z przykładu ze zmienną z, gdzie żeby jej użyć, muszę ją powiązać z konkretnym obiektem.

3
woks napisał(a):

Chodzi mi o zmienną **type **użytą w klasie **FoodObject **. Jest to zmienna nie statyczna w takiej samej metodzie.

To nie jest zmienna niestatyczna, to jest publiczne pole klasy bazowej ItemObject, a więc masz do niego dostęp w klasie potomnej FoodObject.

Jeżeli chciał bym wyświetlić wartość zmiennej z w metodzie Main to muszę ją przypisać do obiektu (np. klasy Wyswietlacz1)?
Na tą chwilę nie jest przypisana do żadnego obiektu?

Co Ty w ogóle rozumiesz przez "przypisanie zmiennej do obiektu"?
Zmienna to takie tymczasowe coś, co istnieje wewnątrz metody. Jak dla mnie, to można albo zdefiniować pole w klasie, wtedy obiekty tej klasy będą miały do niego dostęp, albo przypisać wartość do czegoś (np. pola klasy albo zmiennej).

3

Tak szczerze to prawie nic nie rozumiem z tego co napisałeś Może najpierw naucz się podstaw języka c# a potem zabierz się za Unity ?

0
somekind napisał(a):
woks napisał(a):

Chodzi mi o zmienną **type **użytą w klasie **FoodObject **. Jest to zmienna nie statyczna w takiej samej metodzie.

To nie jest zmienna niestatyczna, to jest publiczne pole klasy bazowej ItemObject, a więc masz do niego dostęp w klasie potomnej FoodObject.

Jeżeli chciał bym wyświetlić wartość zmiennej z w metodzie Main to muszę ją przypisać do obiektu (np. klasy Wyswietlacz1)?
Na tą chwilę nie jest przypisana do żadnego obiektu?

Co Ty w ogóle rozumiesz przez "przypisanie zmiennej do obiektu"?
Zmienna to takie tymczasowe coś, co istnieje wewnątrz metody. Jak dla mnie, to można albo zdefiniować pole w klasie, wtedy obiekty tej klasy będą miały do niego dostęp, albo przypisać wartość do czegoś (np. pola klasy albo zmiennej).

Już wyjaśniam o co mi dokładnie chodzi.
Żeby wyświetlić zmienną z, muszę "powiązać" ją z jakimś obiekte:

	public static void Main()
	{
		Wyswietlacz1 w1 = new Wyswietlacz1();
		w1.Testowa();
	}

Bez tego jej nie wyświetlę, nie mogę na niej w pewnym sensie pracować.

I teraz odnosząc się do przykładu z Unity 3D. W klasie **FoodObject **, używam zmiennej (pola) type w metodzie Awake. Do tego miejsca wszystko mi się układa. Zastanawia mnie to, że mogę używać tej zmiennej (pracować z nią) w samym już silniku nie przypisując jej do żadnego obiektu - istnieje bez powiązania z żadnym obiektem i da się z niej normalnie korzystać.

1

Bo Unity publiczne serializowane pola tworzy sam.
Jakby było prywatne, to musiałbyś napisać new...

Publiczne pola można ustawiać w edytorze więc jakaś nawet pusta lista, czy tablica zostanie utworzona sama.

1 użytkowników online, w tym zalogowanych: 0, gości: 1