Aracılığıyla paylaş


explicit (C# Başvurusu)

explicit Anahtar sözcüğünü bir cast ile çağrılan türü kullanıcı tanımlı bir dönüştürme işleci bildirir.Örneğin, bu işleci Fahrenhayt santigrat adlı bir sınıf olarak adlandırılan bir sınıftan dönüştürür:

// Must be defined inside a class called Fahrenheit: 
public static explicit operator Celsius(Fahrenheit fahr)
{
    return new Celsius((5.0f / 9.0f) * (fahr.degrees - 32));
}

Bu dönüştürme işleci aşağıdaki gibi çağrılabilir:

Fahrenheit fahr = new Fahrenheit(100.0f);
Console.Write("{0} Fahrenheit", fahr.Degrees);
Celsius c = (Celsius)fahr;

Dönüştürme işleci bir kaynak türden hedef türe dönüştürür.Kaynak türü dönüştürme işleci sağlar.Örtük dönüştürme, açıkça dönüştürme işleçleri atama çağrılması gerekir.Dönüştürme işlemi, özel durumlara neden veya bilgileri kaybedersiniz, işaretlemesi gerektiğini explicit.Bu derleyici sessizce muhtemelen öngörülemeyen sonuçlara dönüştürme işlemi yürütmesini engeller.

Derleme zamanı hatası CS0266 cast sonuçlara atlama.

Daha fazla bilgi için bkz. Dönüşüm İşleçleri Kullanma (C# Programlama Kılavuzu).

Örnek

Aşağıdaki örnek sağlayan bir Fahrenheit ve Celsius sınıfı, her biri bir başka bir sınıf için açıkça dönüştürme işleci sağlar.

class Celsius
{
    public Celsius(float temp)
    {
        degrees = temp;
    }
    public static explicit operator Fahrenheit(Celsius c)
    {
        return new Fahrenheit((9.0f / 5.0f) * c.degrees + 32);
    }
    public float Degrees
    {
        get { return degrees; }
    }
    private float degrees;
}

class Fahrenheit
{
    public Fahrenheit(float temp)
    {
        degrees = temp;
    }
    // Must be defined inside a class called Fahrenheit: 
    public static explicit operator Celsius(Fahrenheit fahr)
    {
        return new Celsius((5.0f / 9.0f) * (fahr.degrees - 32));
    }
    public float Degrees
    {
        get { return degrees; }
    }
    private float degrees;
}

class MainClass
{
    static void Main()
    {
        Fahrenheit fahr = new Fahrenheit(100.0f);
        Console.Write("{0} Fahrenheit", fahr.Degrees);
        Celsius c = (Celsius)fahr;

        Console.Write(" = {0} Celsius", c.Degrees);
        Fahrenheit fahr2 = (Fahrenheit)c;
        Console.WriteLine(" = {0} Fahrenheit", fahr2.Degrees);
    }
}
// Output: 
// 100 Fahrenheit = 37.77778 Celsius = 100 Fahrenheit

Aşağıdaki örnek, bir yapı tanımlar Digit, temsil eden tek bir ondalık basamak.Bir işleç türünden için tanımlanan byte için Digit, ancak tüm bayt dönüştürülebilir bir Digit, açıkça dönüştürme.

struct Digit
{
    byte value;
    public Digit(byte value)
    {
        if (value > 9)
        {
            throw new ArgumentException();
        }
        this.value = value;
    }

    // Define explicit byte-to-Digit conversion operator: 
    public static explicit operator Digit(byte b)
    {
        Digit d = new Digit(b);
        Console.WriteLine("conversion occurred");
        return d;
    }
}

class ExplicitTest
{
    static void Main()
    {
        try
        {
            byte b = 3;
            Digit d = (Digit)b; // explicit conversion
        }
        catch (Exception e)
        {
            Console.WriteLine("{0} Exception caught.", e);
        }
    }
}
/*
Output:
conversion occurred
*/

C# dil belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.

Görevler

Nasıl yapılır: Yapılar Arasında Kullanıcı Tanımlı Dönüşümler Uygulama (C# Programlama Kılavuzu)

Başvuru

C# Anahtar Sözcükleri

implicit (C# Başvurusu)

operator (C# Başvurusu)

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu

Kullanıcı tanımlı açıkça dönüştürmeleri C# [NULL]'ta zincirleme