Soru & Cevap

Class Instance Almak

18.10.2020 - 03:50

Merhabalar,

C#'ta yeniyim. Obje oluşturma konusunda kafam karıştı.

Obje oluşturuken ;

 

 class Program
    {
        static void Main(string[] args)
        {
           
            Program z1 = new Program();
            

        }
    }

şeklinde obje oluşturuyoruz. 
Buna araştırdığım kadarıyla instance almak  deniyor. Başka bir video da ise ;
 

class Program
    {

        public Program z1;

        static void Main(string [] args)
        {

            

        }
    }

  şeklinde ki işleme de instance alma dedi. Ama burada yaptığı işlem sadece "z1" adında değişken oluşturmak değil mi ?
Bir de anlamadığım ikinci kısım ise değişken türü nasıl "Program" olabiliyor ? Yani değişken türü olarak "int", "string" vs. biliyorum ama "Program" nasıl bir değişken türü olabiliyor ?

Şimdiden çok teşekkür ederim

2,130 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-305923-1601953396.png
muharrir
20.10.2020 - 04:03
Bu örnek için
i = this;
ile
i = new GameAssets();
aynı ifadedir.
Dolayısı ile sneakHeadSprite verisi nesne aracılığı ile çağrılmıştır.
Alpay Palabıyık
26.10.2020 - 04:52
Şimdi anladım. Cevabınız için teşekkür ederim. Zihnimde ki büyük bir boşluğu doldurdu.
Alpay Palabıyık
26.10.2020 - 04:54
Peki, GameAssets i = new GameAssets(); ile GameAssets i; i = new GameAssets(); arasında fark var mı ?
ÇELİK
10.08.2021 - 09:58

İki tanımlama arasında çalışma alanı (scope) farkı olabilir.

picture-308387-1601817030.png
alpayoguz97
19.10.2020 - 11:30

Up 

picture-308387-1601817030.png
alpayoguz97
18.10.2020 - 05:54

Cevabınız için teşekkür ederim. İkinci sorunun cevabını anladım. Yalnız ilk soru için verdiğiniz cevap sanırım benim sorumun cevabı değil. Constructor methodlara biraz hakimim. Ama benim sorduğum class ismiyle değişken oluşturup instance almak dedi. Hatta örneği de direk yazayım. 

 

public class GameAssets : MonoBehaviour
{

    public  Sprite sneakHeadSprite;

    public static GameAssets i;

    public void Awake()
    {
        i = this;
    }

Burada ki "i" değişkenini başka bir classtan  "sneakHeadSprite" değişkenine ulaşmak için kullandı. Normalde non-static bir değişkene ulaşmak için instance object gerektiğini biliyorum. Yani "sneakHeadSprite" değişkenine başka bir classtan erişebilmek için obje oluşturup o obje ile değişkene ulaşabildiğimizi biliyorum. Ama burada "sneakHeadSprite" değişkenine ulaşabilmek için yine bir değişken kullandı. Ona da burda erişiyor :

 

public class GameHandler : MonoBehaviour {


    

    private void Start() {


        GameObject sneakHeadGameObject = new GameObject();
        SpriteRenderer sneakHeadSpriteRenderer;
        sneakHeadSpriteRenderer  = sneakHeadGameObject.AddComponent<SpriteRenderer>();
        sneakHeadSpriteRenderer.sprite = GameAssets.i.sneakHeadSprite;
        
        

        

        

       
       
    }



}

Burada kafamı karıştıran nokta "sneakHeadSprite" değişkenine ulaşmaya çalışırken obje değil yine değişken kullanması oldu. 
("GameAssets.i.sneakHeadSprite")
 

picture-307552-1601310528.png
jfirat.alabuga
18.10.2020 - 04:55

class Coords {

public int x, y;

public Coords() {

x = 0;

y = 0;

}

}

Bu yapı instance constructor (yapıcı method) dır.

Aynı durumu yukarıda örnek veriğin durum içinde geçerli kılabilirsin

Diğer sorunun cevabı ise şu şekilde

Program z1 = new Program();

şu cümlenin çevirisi

aslında şudur ; ' kendi türümden(class Program) bir  z1 nesnesi oluşturuyorum. '

demektir.