連載:[完全版]究極のC#プログラミング

Chapter14 拡張メソッド

川俣 晶
2010/03/01

14.13 なぜ「using System.Linq;」なのか?

 ここまで見てきて、ぜひ使いたいというメソッドが見つかった読者もいると思う。しかし、LINQは難しくて手が出ないと思っている読者もいるだろう。そういう読者は、LINQは使わないのにこれらのメソッドを使うために、「using System.Linq;」と書き込む必要があることに釈然としない感じを受けるかもしれない。しかし、これらは紛れもなくLINQを構成する一部なのである。

 LINQといえば、

from 〜 in 〜 where 〜 select 〜

といったクエリ式を連想するかもしれないが、これはLINQのクエリ構文と呼ばれるものである。しかし、LINQにはこれとは別に「メソッド構文」というものがあり、メソッド呼び出しの連鎖としてクエリを記述できる。その際、上記リストにあるWhereメソッドなどが“まさにそのままメソッドとして”使用される。詳しくは、第16章で解説を行う。

 つまり、これらのメソッドを使い始めたあなたにとって、LINQは縁遠いものではない。すでにLINQの世界に踏み込んでいるのである。

【Exercise】練習問題

 string型(System.Stringクラス)が持つLengthプロパティが返す値を、シフトJIS表現でのバイト数とするように振る舞いを変えたいと思った。この意図を拡張メソッドを用いて実現できない理由として、正しいものが2つある。それはどれか?

  1. 拡張メソッドは、既存の機能を置換できない
  2. string型は、シールクラスなので拡張できない
  3. 拡張メソッドは、LINQ対応のコレクションしか拡張できない
  4. 拡張メソッドは、メソッドのみ可能でありプロパティは対象外
  5. string型が定義されるときに、using文を用いてインポートされていない

 ◎解答:「1、4」(この行をマウスで選択してください)End of Article


 INDEX
  [完全版]究極のC#プログラミング
  Chapter14 拡張メソッド
    1.14.1 C# 2.0プログラマーの悲劇
    2.14.2 Allメソッドを利用するのに必要な記述
    3.14.3 拡張メソッドの概要
    4.14.4 スイッチなしで機能する例
    5.14.5 sealedクラスを拡張する
    6.14.6 拡張メソッドはオブジェクト内部に手出しできない
    7.14.7 拡張メソッドはオブジェクトの振る舞いを変更できない
    8.14.8 拡張メソッドが安全である理由
    9.14.9 メソッド呼び出しと型の関係
    10.14.10 thisの正体
    11.14.11 拡張メソッドを使用すべきとき
    12.14.12 コレクションに拡張されるメソッド
  13.14.13 なぜ「using System.Linq;」なのか?/練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間