Aybars Arslan

Console.WriteLine("Hello World");

C# – Is, As ve Casting

Selam arkadaşlar bu yazıda c# dilinde kullandığımız is, as keywordlari ve casting‘e değineceğiz.

Öncelikle main metodunda kullanacağımız. Shape sınıfımızı paylaşacağım. Shape sınıfı abstract bir sınıf ve bu sınıftan türeyen daire ve diktörgen sınıflarımız mevcut. Daire ve diktörgen sınıflarımız üzerinden is, as ve casting‘i inceleyeceğiz.

public abstract class Shape
{
    public string Name { get; set; }

    public virtual void GetInfo()
    {
        Console.WriteLine($"This is {Name}");
    }

    public abstract double Area();
}

public class Circle : Shape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Name = "Circle";
        Radius = radius;
    }

    public override double Area()
    {
        return Math.PI*(Math.Pow(Radius, 2.0));
    }
}

public class Rectangle : Shape
{
    public double Length { get; set; }
    public double Width { get; set; }

    public Rectangle(double length, double width)
    {
        Name = "Rectangle";
        Length = length;
        Width = width;
    }

    public override double Area()
    {
        return Length*Width;
    }
}

Sınıfımızın gayet açık ve anlaşılır olduğunu varsayarak. Program(main) bölümümüze geçiyoruz.

class Program
{
    static void Main(string[] args)
    {
        // 1 Daire ve 1 Dikdörtgen oluşturup Shape dizimize atıyoruz.
        Shape[] shapes = {new Circle(5), new Rectangle(4, 5)};

        foreach (var s in shapes)
        {
            s.GetInfo();

            Console.WriteLine("{0} Area : {1:f2}", s.Name, s.Area());

            // As keyword
            // s circle ise testCircle bizim Circlemiz olacak
            // As objeyi cast etmeyi dener. Cast edemezse null döndürür
            // degil ise null olacak
            Circle testCircle = s as Circle;

            if (testCircle == null)
            {
                Console.WriteLine("This isn't a circle");
            }

            // Is keyword "conditon" 
            // objenin belirtilen objeye cast edilip edilemeyeceğini kontrol eder
            if (s is Circle)
            {
                Console.WriteLine("This isn't rectangle");
            }

            // Casting
            object circ = new Circle(4);
            Circle circ2 = (Circle)circ;
            var rect = (Rectangle) circ; // EXCEPTION
        }

        Console.ReadKey();
    }
}

Yorum satırlarında da belirtildiği gibi;

As : Objeyi cast etmeyi dener cast ederse, yeni objemize değeri yazar cast edemezse null döndürür

Is : Bir control ifadesidir. Objenin belirtilen objeye cast edilip edilemeyeceğini sorgular.

Casting : Objeyi spesifik bir objeye aktarmaya çalışır. Aktaramadığı durumda exception fırlatır. 

İyi çalışmalar.

Paylaş !

, , , , ,

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir