• 05-06-2020, 08:30:37
    #1
    Selamun aleykum, 2 gündür kafa patlatiyorum çözemedim. Lütfen yardımcı olun.

    Çok önemli bir konuda yardım lazım. 2 farklı ama benzer class kullanıyorum liste için. Ve tek Bir fonksiyonda çalıştırmam lazım bunları. Ama farklı classları hangi parametre ile methoda çağırabilirim? Çok önemli çözüm bulamadım 2 gündür uğraşıyorum.

    Public int atamaBir;
    public int atamaiki;
    
    Public class ilkClass{
    İnt birinciDeger;
    int ikinciDeger;
    string ucuncuDeger;
    }
    
    Public class ikinciClass{
    int birinciDeger;
    int ikinciDeger;
    list<string> ucuncuDeger= new list<string>();
    }
    
    public ilkClass[] ListeBir;
    public ikinciClass[] Listeiki;
    
    Public void classErisim(Parametre ortakClasslar){
    
    for(int i=0; i <10;i++){
    atamaBir = ortakClasslar[i].birinciDeger;
    atamaiki = ortakClasslar[i].ikinciDeger;
    }
    }
    Kullandığım kodun en basitleştirilmiş hali bu. Ciddi bir kod yığınım var ortalama 300 satır. Birbirine girmiş durumda.

    Yukarıdaki örnekte ortakClasslar parametresine ne yazarsam iki classı da kapsayan bir parametre vermiş olurum? Çok önemli lütfen yardım.
    Her şeyi denedim VS sürekli bu buna atanamaz, bu buna dönüştürülemez hatası veriyor. Ortak bir parametre arıyorum
  • 05-06-2020, 08:35:04
    #2
    Açıkcası ne yapmaya çalıştığını anlamadım. int değer ya da object değer verip cast edebilirsin. inheritance'a da bakabilirsin belki işini görebilir.



    Anladığım kadarıyla cast ile alakalı bir problemin var cast edersen çözülür. Bunun dışında bu iş için automapper falan da kullanılır
  • 05-06-2020, 08:38:57
    #3
    Üyeliği durduruldu
    İnheritance kullanıp halledebilirsiniz
  • 05-06-2020, 08:47:49
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    inheritance işini görür
  • 05-06-2020, 08:54:34
    #5
    Atroks adlı üyeden alıntı: mesajı görüntüle
    Açıkcası ne yapmaya çalıştığını anlamadım. int değer ya da object değer verip cast edebilirsin. inheritance'a da bakabilirsin belki işini görebilir.




    Anladığım kadarıyla cast ile alakalı bir problemin var cast edersen çözülür. Bunun dışında bu iş için automapper falan da kullanılır
    mucahitguner adlı üyeden alıntı: mesajı görüntüle
    İnheritance kullanıp halledebilirsiniz
    Teşekkürler bilgiler için biraz baktım ve işime yaracak bir fonksiyon ama yukarıdaki durumu çözmüyor galiba.

    Kısaca 2 farklı classım var bunları liste olarak kullanıyorum. Birincisi karakter seçim ekranı ikincisi tema seçim ekranı için. Bazı ortak verileri var ama ortak olmayan verileri de var.

    İşleyiş ve değer atamaları hemen hemen aynı olduğu için tek fonksiyonda çalıştırmam gerekiyor. Yani parametre olarak tema veya karakter classlarından hangisini gönderirsem onu işleyecek.

    Şöyle örnek vereyim. Anlatabilmek için inşallah.
    int a;
    int b; diye iki değerimiz olsun.
    int c; değerimiz de yer tutucu olsun.

    void start(){
    Calistir (a);
    Calistir (b);
    }
    void Calistir(int c){
    c= 3;
    }

    Şimdi burada çalıştır fonksiyonuna a değişkenini de göndersem b değişkenini de göndersem ikisini de isleyebiliyor. Çünkü veri tipleri aynı.

    İlk attığım konuda farklı classlar olduğu için veritipini aynı yapamıyorum. Yani birinciClass veya ikinciClass hangisini gönderirsem göndereyim tek fonksiyonda işlemesi lazım. Ama ortak parametre bulamadım. İnşallah anlatabilmisimdir kafam çok karışık.
  • 05-06-2020, 08:58:11
    #6
    mfa95 adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler bilgiler için biraz baktım ve işime yaracak bir fonksiyon ama yukarıdaki durumu çözmüyor galiba.

    Kısaca 2 farklı classım var bunları liste olarak kullanıyorum. Birincisi karakter seçim ekranı ikincisi tema seçim ekranı için. Bazı ortak verileri var ama ortak olmayan verileri de var.

    İşleyiş ve değer atamaları hemen hemen aynı olduğu için tek fonksiyonda çalıştırmam gerekiyor. Yani parametre olarak tema veya karakter classlarından hangisini gönderirsem onu işleyecek.

    Şöyle örnek vereyim. Anlatabilmek için inşallah.
    int a;
    int b; diye iki değerimiz olsun.
    int c; değerimiz de yer tutucu olsun.

    void start(){
    Calistir (a);
    Calistir (b);
    }
    void Calistir(int c){
    c= 3;
    }

    Şimdi burada çalıştır fonksiyonuna a değişkenini de göndersem b değişkenini de göndersem ikisini de isleyebiliyor. Çünkü veri tipleri aynı.

    İlk attığım konuda farklı classlar olduğu için veritipini aynı yapamıyorum. Yani birinciClass veya ikinciClass hangisini gönderirsem göndereyim tek fonksiyonda işlemesi lazım. Ama ortak parametre bulamadım. İnşallah anlatabilmisimdir kafam çok karışık.
    inheritance kullanarak ortak özelliklerin yer aldığı classdan devralabilirsin. illa ben böyle yapacağım diyorsan manuel cast ede ede yap object gönder cast ederek değer ataması yap.
    yapmaya çalıştığın şeyi gerçekten anlamıyorum teknik terimler kullanmadan bize sadece ne yapmak istediğini göster ben bunu bunu yapmak istiyorum amacım bu şeklinde.
  • 05-06-2020, 09:17:14
    #7
    Atroks adlı üyeden alıntı: mesajı görüntüle
    inheritance kullanarak ortak özelliklerin yer aldığı classdan devralabilirsin. illa ben böyle yapacağım diyorsan manuel cast ede ede yap object gönder cast ederek değer ataması yap.
    yapmaya çalıştığın şeyi gerçekten anlamıyorum teknik terimler kullanmadan bize sadece ne yapmak istediğini göster ben bunu bunu yapmak istiyorum amacım bu şeklinde.
    Valla hocam proje çok karışık unity üzerinde çalışıyorum. Yukarıdaki classlar listedeki her elemanın özelliklerini barındırıyor.
    Yani karakter sınıfı var. Karakter ekledikce özelliklerini belirliyorum. Tem sınıfında da temaların özellikleri.

    Seçim yapınca da hangi elemana tıklandiysa altındaki sınıfa girip değişkenlere atama yapıyorum.

    Yani iki farklı fonksiyonum var. TemaSecildi ve Karakter seçildi şeklinde. Bunlar birleştirip itemSecildi diye tek bir sınıfta toplamam lazım. Galiba önerdiğiniz yöntem geçici de olsa bir çözüm sağlıyor gibi. Şimdi denedim sıkıntı yasamazsam bunu kullanırım çok teşekkürler. Fazladan veri çekmek gerekiyor ama işimi görecek gibi.

    300 satır kod var hocam birebir bağlantılı. En basit halı yukarıdaki attığım. O yüzden benim de kafam çok karıştı


    Edit: aynı konuda takılanlar için yaptığım şey şu.
    A classını B classına önerilen yöntemle ekledim. Daha sonra fonsiyon parametresi olarak A sınıfını kullandım (AClass[] ortakClass) şeklinde array olarak ekledik galiba. OrtakClass[i] for döngüsü ile parametre olarak gönderilen hangi classsa onu işleyebiliyor artık. daha iyi bir yöntem bulana kadar en iyi yöntem bu teşekkürler. Yani tek fonksiyonla iki farklı class'dan hangisi gonerildiyse onu rahatlıkla isleyeniliyorum.
  • 07-06-2020, 01:24:24
    #8
    Arkadaşlar cevap vermişler aslında dedikleri gibi kalıtım senin işini görürdü. Aynı mantıkla interface kullanmak da işini görürdü. Kullanım mantığı şöyle oluyor bak,
    interface IOrtakClass{ int birinciDeger; int ikinciDeger;}
    daha sonra
    public class birinciClass, IOrtakClass {int ucuncuDeger;}
    aynı şekilde ikinci class'ını da tanımlarsın. Daha sonra method içinde de parametre olarak IOrtakClass eklersin. Böylece bu metoda parametre olarak birinciClass ve ikinciClass'ı ya da IOrtakClass'ı miras alan başka classları gönderebilirdin.
  • 07-06-2020, 05:02:06
    #9
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Aslında basit bir konu, komplike düşünmeye gerek yok.

    Sınıflar da birer objedir. Bu yüzden tüm sınıfları önce obje türüyle ele alıp sonrasında tür değişimi uygulayabilirsin.

    public void classErisim(object[] ortakClasslar)
    {
        for (int i = 0; i < 10; i++)
        {
            atamaBir = ((ilkClass)ortakClasslar[i]).birinciDeger;
            atamaiki = ((ikinciClass)ortakClasslar[i]).ikinciDeger;
        }
    }