ホームページ  >  記事  >  バックエンド開発  >  C# カスタムの暗黙的および明示的な変換

C# カスタムの暗黙的および明示的な変換

黄舟
黄舟オリジナル
2017-02-16 11:27:231650ブラウズ

明示的と暗黙的は変換演算子です。これら 2 つを使用すると、カスタマイズされた型で相互交換をサポートできるようになります。
明示的とは、A -> B から強制的な型変換を実行する必要があることを意味します。 implicit は、B -> A から直接代入するだけ (A = B) などの暗黙的な変換を意味します

暗黙的な変換は、コードをより美しく、簡潔で理解しやすくすることができるため、最良の A多くの暗黙的な演算子が使用されます。しかし!オブジェクト自体が変換時に一部の情報 (精度など) を失う場合は、

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;
        }
    }

Call:


を呼び出すときにコンパイル時に顧客に警告できるように、明示的な演算子を使用することしかできません。

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

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

Output:



Application:
たとえば、実際の操作では、オブジェクト A (またはエンティティ) が保存用に XML にシリアル化される場合、 object クラスの object 要件を満たす XML コンテンツをオブジェクトまたはエンティティに変換する明示的な演算子。
もちろん、オブジェクト A のクラスに関数を定義してこの処理を実装することもできますが、これには追加の手順が必要になる場合があります。つまり、関数が静的関数ではない場合、最初にオブジェクトをインスタンス化して呼び出す必要があります。対応する処理関数。


参照:

明示的なキーワード

暗黙的なキーワード

演算子キーワード


デモのダウンロード

上記は C# カスタムの暗黙的および明示的変換の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。