Heim  >  Artikel  >  Backend-Entwicklung  >  Benutzerdefinierte implizite und explizite C#-Konvertierung

Benutzerdefinierte implizite und explizite C#-Konvertierung

黄舟
黄舟Original
2017-02-16 11:27:231702Durchsuche

Explizite und implizite Konvertierungsoperatoren können es unseren benutzerdefinierten Typen ermöglichen, den gegenseitigen Austausch zu unterstützen, z. B. von A -> = (B)A)
implizit bedeutet implizite Konvertierung, z. B. von B -> A muss nur direkt zugewiesen werden (A = B)

Implizite Konvertierung kann Lassen Sie unseren Code schöner, prägnanter und verständlicher aussehen. Daher ist es am besten, häufiger implizite Operatoren zu verwenden. Aber! Wenn das Objekt selbst beim Konvertieren einige Informationen (z. B. Genauigkeit) verliert, können wir nur den expliziten Operator verwenden, damit Kunden beim Aufrufen von

zur Kompilierungszeit gewarnt werden können

namespace OperatorTest
{
    /// <summary>
    /// 猪
    /// </summary>
    public class Pig
    {
        public Pig(string name)
        {
            this.Name = name;
        }
        public string Name;

        //explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。
        //static explicit operator target_type { source_type identifier }
        //target_type 目标类型
        //source_type 源类型
        //identifier Something
        /*转换运算符将源类型转换为目标类型。源类型提供转换运算符。与隐式转换不同,必须通过强制转换的方式来调用显式转换运算符。如果转换操作可能导致异常或丢失信息,则应将其标记为 explicit。这可以防止编译器无提示地调用可能产生无法预见后果的转换操作*/
        public static implicit operator Pig(Monkey value)
        {
            Pig mk = new Pig(value.Name + ":猴子变猪!!");
            return mk;
        }
    }
namespace OperatorTest
{
    /// <summary>
    /// 猴子
    /// </summary>
    public class Monkey
    {
        public Monkey(string name)
        {
            this.Name = name;
        }
        public string Name;

        //implicit 关键字用于声明隐式的用户定义类型转换运算符。
        //static implicit operator target_type { source_type identifier }
        public static explicit operator Monkey(Pig value)
        {
            Monkey mk = new Monkey(value.Name + ":猪变猴子!!");
            return mk;
        }
    }
Aufruf:


 Monkey monkey = new Monkey("悟空");
            //隐式转换 猴子变猪
            Pig monkeyToPig = monkey;
            MessageBox.Show(monkeyToPig.Name);

            Pig pig = new Pig("八戒");
            //显式转换 猪变猴子
            Monkey pigToMonkey = (Monkey)pig;
            MessageBox.Show(pigToMonkey.Name);

Ausgabe:



Anwendung:
Beispielsweise handelt es sich im tatsächlichen Betrieb um ein Objekt A (oder eine Entität). in XML-Speicher serialisiert, können Sie dann einen expliziten Operator in der Klasse von Objekt A definieren, um den XML-Inhalt, der die Anforderungen erfüllt, in ein Objekt oder eine Entität zu konvertieren.
Natürlich können Sie auch eine Funktion in der Klasse von Objekt A definieren, um diese Verarbeitung zu implementieren. Dies erfordert jedoch möglicherweise einen zusätzlichen Schritt. Das heißt, wenn die Funktion keine statische Funktion ist, müssen Sie das Objekt zuerst instanziieren um die entsprechende Verarbeitungsfunktion aufzurufen.


Referenz:

explizites Schlüsselwort

implizites Schlüsselwort

Operator-Schlüsselwort


Demo-Download

Das Obige ist der Inhalt der benutzerdefinierten impliziten und expliziten C#-Konvertierung. Für weitere verwandte Inhalte achten Sie bitte auf PHP Chinesisches Netz (www.php.cn)!




Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:C#-PolymorphismusNächster Artikel:C#-Polymorphismus