ここで話したいのは、C# のユーザー定義変換 (User-Defined Conversions) です。これは、構造体である前述の構造体の知識を使用します。コースでは構造体の使い方がわかります(今も構造体の使い方を考えていましたが(笑)) class で宣言したものはクラス、struct で宣言したものは型とみなすことができます。はい、これは int、short、long などの C# の型に似ています
C# では構造体 (構造体) とクラス (クラス) を変換できるため、それらの変換をいくつか定義できます。変換宣言は明示的と暗黙的のいずれかを選択する必要があります。たとえば、このステートメントを使用する場合、
int a=10;
System.Console.PRintln(a):
(String) の場合は int toString の暗黙的な変換を使用します。 a、それは表示と呼ばれます。したがって、明示的/非表示の違いは、それが表示されるかどうかにあります。明日、例を書き出して分析すると明らかになるでしょう。わかりました、最初の一歩を踏み出します
ああ~~~~~ 5 月 5 日の 8 時 45 分に、ようやく起きました。この例では、RomanNumeral という名前の型が宣言されています。そして、いくつかの変換を実装しました。
000: // UserConversionsconversion.cs
001: using System;
002:
003: struct RomanNumeral
004: {
005: public RomanNumeral(int value)
006: {
007 : this.value = 値;
008: }
009: 静的パブリック暗黙演算子 RomanNumeral(int 値)
010: {
011: 新しい RomanNumeral(値) を返す;
012: }
013: 静的パブリック明示演算子 int( RomanNumeral roman)
014: {
015: return roman.value;
016: }
017: 静的パブリック暗黙演算子 string(RomanNumeral roman)
018: {
019: return("変換はまだ実装されていません");
020 : }
021: private int 値;
022: }
023:
024: クラス Test
025: {
026: static public void Main()
027: {
028: RomanNumeral 数値;
029:
030: 数値= 10;
031:
032: // 数値から int033 への明示的な変換: Console.WriteLine((int)numeral);
034:
035: // string036 への暗黙的な変換: WriteLine(numeral);
037 :
038: // 明示的に int に変換してから、明示的に short040: short s = (short)numeral;
041:
042: Console.WriteLine(s);
043:
044: }
045: }
この例の出力は次のとおりです:
10
変換はまだ実装されていません
10
演算子 009 と 013 に注意してください。これらは変換演算子です。静的パブリック明示演算子 int(RomanNumeral roman)、この形式を覚えておいてください。 033 行目をもう一度見てください。int 変換は明示的に宣言されているため、この変換を使用する場合は括弧を使用する必要があります。この例では、RomanNumeral と BinaryNumeral の 2 つの構造体を宣言しています。
000: // UserConversionsstructconversion.cs
001: using System;002:
003: struct RomanNumeral
004: {
005: public RomanNumeral(int value) { this.value = value; }
006: 静的パブリック暗黙演算子 RomanNumeral(int 値)
007: {return new RomanNumeral(value);}
008: 静的パブリック暗黙演算子
009: RomanNumeral(BinaryNumeral バイナリ)
010: {return new RomanNumeral((int )binary);}
011: 静的パブリック明示的演算子 int(RomanNumeral roman)
012: {return roman.value;}
013: 静的パブリック暗黙的演算子 string(RomanNumeral roman)
014: {return("変換はまだ実装されていません");}
015: プライベート int 値;
016: }
017:
018: struct BinaryNumeral
019: {
020: public BinaryNumeral(int value) {this.value = value;}
021:
022:静的パブリック暗黙演算子 BinaryNumeral(int value)
023: {return new BinaryNumeral(value);}
024: 静的パブリック暗黙演算子 string(BinaryNumeral binary)
025: {return("変換はまだ実装されていません");}
026 : 静的パブリック明示演算子 int(BinaryNumeral binary)
027: {return(binary.value);}
028:
029: private int 値;
030: }
031:
032: クラス Test
033: {
034 : static public void Main()
035: {
036: RomanNumeral roman;
037: roman = 10;
038: BinaryNumeral バイナリ;
039: binary = (BinaryNumeral)(int)roman;
040: roman = binary;
041: Console.WriteLine((int)binary);
042: Console.WriteLine(binary);
043: }
044: }
この例の出力は次のとおりです:
10
行 039 は、直接変換が提供されていないため、RomanNumeral から BinaryNumeral に直接変換されません。そのため、最初に RomanNumeral を int に変換し、次に BinaryNumeral に変換します。残りの部分は上記の例と同じです (少なくとも私はそう思います)。 . 上記の例を理解できれば、以下は大丈夫です
上記は SUNWEN チュートリアル - C# 上級 (9) の詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。