Xml element c # linq choose where

概要

「デ ー タ の 構造 化」 で 少 し 触 れ て 以来, ず っ と ク ラ ス だ け を 使 っ て 説明 し て き ま し た が, こ こ で, C # に お け る 「も う 1 つ の 複合 型」 で あ る 構造 体 に つ い て 説明 し ま す.

根本 的 な 差 は, 次 項 で 説明 す る 「値 型」 か 「参照 型」 か の 違 い に 起因 し ま す. 構造 体 は 値 型 で, そ の た め に ク ラ ス と 比 べ て い く つ か 用途 に 制 限 が か か り ま す.

構造 体 の 制 限

と り あ え ず 、 ク ラ ス と 構造 体 を 並 べ て 書 い て み ま し ょ う。

構造 体

ク ラ ス

単 純 に 、 ク ラ ス の 方 が で き る こ と は 多 い で す。

ク ラ ス に し か で き な い こ と は 以下 の 通 り。

  • 他 の ク ラ ス か ら 派生 (他 の ク ラ ス を 継 承) す る
    • 継 承 に 関 連 す る 修飾 子 (,,, な ど) を 使 え る も ク ラ ス だ け
  • 静 的 ク ラ ス
  • 引 数 な し の コ ン ス ト ラ ク タ ー の 定義
  • デ ス ト ラ ク タ ー の 定義

一方 、 ク ラ ス ・ 構造 体 ど ち ら で も で き る こ と と は 以下 の と お り で す。

  • 引 数 な し コ ン ス ト ラ ク タ ー 、 デ ス ト ラ ク タ ー 以外 の メ ン バ ー 定義
  • イ ン タ ー フ ェ イ ス の 実 装 (複数 も 可)
  • (構造 体 自身 に は 修飾 子 を 付 け れ な い も の の) 静 的 メ ン バ ー の 定義 自 体 は 可能

構造 体 の 用途

「で き る こ と」 で い う と, 構造 体 は ク ラ ス の 完全 下 位 互換 で, メ リ ッ ト が な い よ う に 見 え ま す. 構造 体 の 利 点 を 理解 す る に は, 次 項 の 値 型 と 参照 型 に つ い て の 知識 が 必要 に な り ま す。

お お ま か に 言 う と 、

  • ク ラ ス と 構造 体 で は メ モ リ の 使 い 方 が 違 う
  • 小 さ な デ ー タ 構造 に 対 し て は 構造 体 が 有利
    • 使 い 方 に も よ り ま す が 、 大 ま か な ガ イ ド ラ イ ン と し て は 16 バ イ ト 程度 が 境界 と 言 わ れ て い ま す

と い う も の で す。

こ の 性質 と 、 前 節 で 説明 し た 制 限 と を 併 せ て 考 え る と 、 構造 構造 体 の 利用 を 検 討 す る の は 、

と い う 状況 下 に な り ま す。

構造 体 の 規定 値

こ れ も 値 型 の 性質 に な り ま す が, ク ラ ス (す る ま で メ モ リ 領域 を 確保 し な い) と 違 っ て, 構造 体 は 宣言 し た 時点 で デ ー タ を 記録 す る た め の メ モ リ 領域 が 確保 さ れ ま す.

ク ラ ス 型 の フ ィ ー ル ド の 場合 は 、 す る な り 他 の イ ン ス タ ン ン ス を 代 入 す る な な り し て 初期 化 す る ま で の 間 い り な す 状態 指 ン す も イ ン ま す タ ン ン す。 ン ン す。 イ す。 指 ン す。 指 す。 指 す。 指 す。 指 す 状態 指 指 す 状態 指 指 す 状態 指イ

一方 、 構造 体 の 場合 、 い わ ゆ る 「0 初期 化」 状態 に な っ て い ま す。 全 全 て の メ ン バ ー に 対 対 し て 、 0 、 も し く は そ よ ま う な の る る に う な の る る る に う な す る る う な の る る に の す る る う な す る

  • 数 値 型 (, な ど) の 場合 は 0
  • 型 の 場合 は
  • 参照 型 (、 配 列 、 ク ラ ス 、 デ リ ゲ ー ト な ど) や Zero 許 容 型 の 場合 は

こ れ ら 、 0 初期 化 状態 に あ る 値 を 、構造 体 の 規定 値(default value) と 呼 び ま す。

引 数 な し コ ン ス ト ラ ク タ ー

構造 体 の メ ン バ ー と し て 、 引 数 な し の コ ン ス ト ラ ク タ ー を 書 書 く こ と は で き ま せ ん。 こ れ は 、 引 数 な し 初期 タ。 で タ ラ ン ス の ラ ス ス の タ ラ ス ス タ ラ ン ス の。 ラ ス ス 初期 タ ラ ン ス う タ ラ ン ス タ。 ラ ス う タ ラ ン で う ラ ン ス の。 ラ で で タ ラ ス タ。 い で の。 ラ で タ ラ ン ス。 で ラ ラ

例 え ば 以下 の コ ー ド で は, ク ラ ス に は 引 数 な し の コ ン ス ト ラ ク タ ー を 定義 し て い ま せ ん が, と い う 書 き 方 で 引 数 な し の 初期 化 を 行 っ て い ま す. こ の 場合, 規定 値 が 得 ら れ ま す.

Ver. 2.0

ち な み に 、 C # 2.0 以降 で は 、 構造 体 の 規定 値 は 、 と い う 書 き 方 の 他 に に 、 と い う 書 き 方 も で で き ま す。 (主 に ジ め 文 に た ク ク)

規定 値 に つ い て 、 詳 し く は 別 項 「規定 値」 」で 説明 し ま す。

確 実 な 初期 化

や で 作 る 「規定 値」 と は 違 っ て, 引 数 付 き の コ ン ス ト ラ ク タ ー を 使 う 場合 は, コ ン ス ト ラ ク タ ー 内 で 全 て の メ ン バ ー を き っ ち り 自 分 の 手 で 初期 化 す る 必要 が あ り ま す.

例 え ば 、 以下 の コ ー ド は 、 コ ン ス ト ラ ク タ ー 内 で の 初期 化 を を 忘 れ て い る の で で コ ン パ イ ル エ ラ ー に な り ま す。

(ク ラ ス の 場合 は こ う い う 制 限 は な く 、 明示 的 に 初期 化 し な か っ っ た フ ィ ー ル ド は 規定 値 (0) で 初期 化 さ れ ま す。)

ま た 、 全 て の フ ィ ー ル ド を 初期 化 す る ま で 、 プ ロ パ テ ィ や や メ ソ ッ ド な ど の の 関 数 メ ン バ ー を 呼 べ な い と い あ り も も も い あ り も も い あ 制約 も も

(同 じ く ク ラ ス の 場合 は 制 限 は な し。 規定 値 (0) が 使 わ れ る だ け。)

自動 プ ロ パ テ ィ の 扱 い 変 更

Ver. 6th

前 節 の 「確 実 な 初期 化」 と 絡 ん で 、 C # 5.0 ま で の C # で は 、 自動 プ ロ パ テ ィ の の 初期 化 が 非常 に 面 倒 で し た。

C # 5.0 以前 の 場合 、 以下 の コ ー ド は コ ン パ イ ル エ ラ ラ ー を 起 こ し ま す。

エ ラ ー を 起 こ す 原因 は 、 以下 の 組 み 合 わ せ の の せ い で す。

  • 自動 プ ロ パ テ ィ を 定義 す る と 、 コ ン パ イ ラ ー が 対 応 す る フ ィ ー ル ド (バ ッ ク フ ィ ー ル ド) を 作 る
  • 構造 体 の 制約 の せ い で 、 バ ッ ク フ ィ ー ル ド が 初期 化 さ れ る ま で で 、 プ ロ パ テ ィ の 読 み 書 き で き な い
  • で も 、 自動 プ ロ パ テ ィ の 場合 、 プ ロ パ テ ィ を 介 さ ず に バ ッ ク ク フ ィ ー ル ド を 初期 化 す る 方法 が な い

こ の せ い で 、 構造 体 と 自動 プ ロ パ テ ィ は 相 性 が 悪 く 、 以下 の よ う う に 、 自動 プ ロ パ テ ィ を 使 わ な い 書 き 方 に 書 き ま が る る あ き ま え る る り ま え る ま が る

こ れ に 対 し て 、 C # 6 で は 、 最初 の コ ー ド が コ ン パ イ ル で き る る よ う に な っ て い ま す。 C # の 仕 様 書 書 以下 の こ た よ さ さ 文 た さ さ

  • 自動 プ ロ パ テ ィ を 型 の 中 か ら 使 う 場合 、 そ の バ ッ ク フ ィ ー ル ル ド に 対 す る 読 み 書 き に 置 き 換 え る

こ の 仕 様 が 追加 さ れ た こ と で 、 先 ほ ど の コ ー ド は バ ッ ク フ ィ ィ ー ル ド の 初期 化 と 見 な さ れ 、 構造 体 の 制約 に 引 っ ま く ら ら ら っ ま く ら ら っ ま か ら ら ま く ら ら

ち な み に 、 C # 6 の 場合 は get の み の 自動 プ ロ パ テ ィ (get-only auto-property) と い う 構 文 が 追加 さ れ て 、 先 ほ ど の コ ー ド は さ に 書。 う ま の の に に 、 ま の の 書 、 ま の の に 、 ま の の 書 、 ま の に 書 、 ま の の 書 、 ま の に 書。。 ま の に 書。 う に に 書。 ま の に な 書。 ま の に 書。。 る の に 書。 う る に に 書。 ま の に 書。 う に に な。。 る に に 書。 う る に に 書。 ま以下

メ ン バ ー 毎 コ ピ ー 、 メ ン バ ー 毎 比較

構造 体 の 変 数 へ の 代 入 は, 全 メ ン バ ー の コ ピ ー に な り ま す. ま た, 構造 体 に は 自動 的 に メ ソ ッ ド が 実 装 さ れ て, メ ン バ ー 毎 の 比較 (全 メ ン バ ー 一致 の 場合 に 一致) に な り ま す.

構造 体 に 対 す る 特別 な 修飾 子

こ こ で は 紹 介 だ け に な り ま す が 、 構造 体 に だ け 付 け る こ と と が で き る 特別 な 修飾 子 が あ り ま す。

詳細 に つ い て は そ れ ぞ れ リ ン ク 先 を 参照 し し て く だ さ い。

ち な み に, 現状 で は, に は 語 順 に 制約 が あ っ て, も し く は の 直 前 に 来 る 必要 が あ り ま す (緩和 も 検 討 さ れ て い ま す) 要 す る に, は OK で す が, は エ ラ ー に な り ま. す.

い く つ か 実 例 を 挙 げ ま す。

お そ ら く 、 以下 の よ う な 型 の 入 れ 子 と メ ソ ッ ド 定義 の の を を 楽 に す る た め の 制 限 (あ く ま で コ ン パ イ ラ ー 都 す。 思 思 思 都 す) れと 思 思

更新 履 歴

更新 : C # 9.0 の 新 機能

[C #]

レ コ ー ド 型

[C #]

更新 : ロ ー カ ル 関 数 と 匿名 関 数

[C #]

モ ジ ュ ー ル 初期 化子

[C #]

コ ー ド 解析 と コ ー ド 生成

[C #]

ブ ロ グ

ピ ッ ク ア ッ プ Roslyn 4/4: static virtual / abstract members

ピ ッ ク ア ッ プ Roslyn: ラ ム ダ 式 の 改善

YouTube で C # が ら み の ラ イ ブ 配 信 初 め て ま し た (1 年 経 っ た)

な ん と か し て く れ る ゼ ロ 幅 ス ペ ー ス

ピ ッ ク ア ッ プ Roslyn: Improved Interpolated Strings