2021年12月23日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 997 count

キャストとas演算子: 呪文一つでタイプチェンジ!

Written By: 川俣 晶連絡先

この章のテーマ §

 キャストとas演算子を学びます。これらは、型を変換する機能ですが、機能は同じではありません。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, 条件演算子, int型, string型, string?型, if文, 継承, Null許容型

解説 §

 C#の全ての型には継承関係があります。そのため、継承関係のある他の型として扱うことも可能です。また、変換可能な型もあります。整数の1を実数の1に変換することは可能です。

 暗黙の変換が実行できる場合は、特に何も指定せずに変換できます。

 明示的に変換場合は、C#には機能が2つあります。キャストとas演算子です。

 キャストはカッコで囲った型名で記述します。たとえば、(float)1の場合、1の型は整数になりますが、(float)1の型はfloat型(実数)になります。

 as演算子は、値 as 型名と書いて型名を変換します。たとえば、x as stringと書くとxの型がobjectでも、x as stringの型はstring型になります。

 一般的にキャストは高機能で低速ですが、as演算子は機能限定で低速とされます。また、キャストは変換できない時に例外を発生させますが、as演算子は結果がnullになり、振る舞いが異なります。

罠の数々 §

  • サンプルソースのbyte c = (byte)(a + b);は、キャストなしには書けない。なぜなら加算の結果は最低int型になるが、int型は32bit幅なので8bit幅のbyte型には格納できないからだ
  • as演算子はnullを許容している型にしか使用できない。変換できなかった時にnull値になるという機能からの必然だ。だから値型の変換にはキャストを使うしかない
  • 例外は比較的重い処理なので、例外を発生させる可能性のあるキャストはできれば避けた方が良い。as演算子で書けるときはas演算子で書こう

参考リンク §

型のテスト演算子とキャスト式 (C# リファレンス)

as 演算子

キャスト式

サンプルソース: kw_as_cast §

Console.WriteLine("キャストの利用例"); 

byte a=1;

byte b=2;

byte c = (byte)(a + b);

Console.WriteLine($"a+b={c}");

Console.WriteLine("as演算子の利用例");

object s = "hello!";

string? t = s as string;

if (t != null) Console.WriteLine($"upper letter of s={t.ToUpper()}");

実行結果 §

キャストの利用例

a+b=3

as演算子の利用例

upper letter of s=HELLO!

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。

object a = 1;

string? b = a as string;

Console.WriteLine(b == null);

  1. 1
  2. False
  3. True
  4. 例外発生 (整数の1をstring型には変換できない)
  5. コンパイルエラー (1は整数だからas演算子は使えない)

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2021年
12月
24日
typeof演算子: 型の情報を何でも取り出す魔法の演算子
3days 0 count
total 932 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2021年
12月
22日
is演算子: 値の型を調べてみよう
3days 0 count
total 855 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20211223084817
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.