Şimdi Ara

tür dönüşümü hakkında sorum :

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
63
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • böyle yapabiliyoruz :
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication26
    {
    class Program
    {
    static void Main(string[] args)
    {


    byte A = 20;
    int c = (byte) A;
    //yani 16 satırda başangıçta yapaılan tanımlamayla parantez içersindeki tanımlama aynı olmak zorunda değil .
    }
    }
    }


    ama böyle yapamıyoruz neden ? :
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication26
    {
    class Program
    {
    static void Main(string[] args)
    {


    int i = 10;
    object o = i; //boxing işlemi yapılmış
    int j = (byte)o; //unboxing işlemi bu ama çalışma zamanında hata alıyorum yukarıda dediğim gibi parantez içindeki dönüştürme ifadesiyle başta tanımlanan değişken tipi aynı olmak zorunda değil ama yine de hata alıyorum her şey uygun olduğu halde, yardım ?



    }
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi deniz caliskan -- 4 Nisan 2017; 18:11:23 >







  • ama yukarıdaki ikinci kod bloğundaki 17 satırda parantez içerisinde byte yerine int yazarsam oluyor ama iki farklı kodu birbiriyle bağdaştıramadım
  • yukarıdakinde 17. line ı double j = (int)o; şeklinde yaparsam yine hata vermiyor sanırsam byte ile ilgili bir sorun var bu byte neden böyle yapıyor arkadaşlar ?



    < Bu mesaj bu kişi tarafından değiştirildi deniz caliskan -- 4 Nisan 2017; 21:34:2 >
  • object ile unboxing yapılırken, unboxing işleminde istenen değerin söylenen değer tipinde veya dönüştürülebilecek değer tipinde olması beklenir. açıklarsak object bir int değeri gösteriyorsa cast edilirken o yerde bir int bulmayı bekleriz.

    int a = 121;
    object o = a;
    //double d = (double)o;
    //float y = (float)o;
    //byte z = (byte)o;
    //int s = (byte)o;
    //long l = (long)o;
    double x = (double)(int)o; //**
    double x2 = (int)o;

    Yorum olarak yazılmış kodlar hata verir, o bir int gösteriyor ama cast edilmek istenen değerler int değil.
    Normal yazılmış kodlarda ise öncelikle (int) ile cast edildiği için problem yok.
    Şimdi siz diyeceksiniz ki o zaman aşağıdaki kod neden hata vermiyor, demeyecekseniz de ben dediniz varsayıyorum.

    int i = 10;
    int j = (byte)i;

    Bu kod hata vermez çünkü i'nin olduğu yerde int bulacağımızı bize vaad eden bir object yok. object ile boxing yapıldığında ise unboxing işlemi için önce kendi türünde açmak zorundayız, kendi türünde açtıktan sonra istediğimiz değere cast edebiliriz. ** yazdığım kısımda olduğu gibi.

    Bu arada böyle ince işlerle uğraşmayı seviyorsanız c# yerine c dilini öğrenmenizi tavsiye ederim. Bu tür detaylar c dilinde daha çok anlam kazanır ve önemlidir.
    Eğer c# öğrenmekte ısrarcıysanız c# açısından çok daha önemli olan fonksiyonlar, nesneler-sınıflar, kalıtım, genericler(generics) gibi konulara geçmenizi öneririm. Lazım oldukça msdn'nin kendi sitesinden bu ayrıntıları zaten öğrenirsiniz, ben de size cevap vermeden önce oraya göz attım zaten.




  • çok sağ ol :) kafamda oturmaya başladı, yarın sabah kalktığımda cevabını tekrar tekrar okuyup tam olarak halletmiş olurum :D tekrar söylüyor çok ama çok sağ ol.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.