「C Sharpその他 - 使用すべき機能」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <br><br> == 使用すべき機能 == ===== IEnumerableを使う ===== <span style="color:#C00000">'''ポイント : メソッドの引数や戻り値、プ…」)
 
編集の要約なし
1行目: 1行目:
== 概要 ==
== 概要 ==
 
新しい構文やライブラリが導入されたことで、記述方法が変わったものがある。<br>
ここでは、その記述方法をまとめる。<br>
<br><br>
<br><br>



2020年2月11日 (火) 01:10時点における版

概要

新しい構文やライブラリが導入されたことで、記述方法が変わったものがある。
ここでは、その記述方法をまとめる。


使用すべき機能

IEnumerableを使う

ポイント : メソッドの引数や戻り値、プロパティの型には、IEnumerable<T> を使う。
データ列に対して、前から順に1要素ずつ読む操作のみを行う場合、List<T>クラスや配列ではなく、IEnumerable<T>インターフェイスを使う。

 // ダメなコード
 // この記述では、配列の内容を書き換えられる
 static readonly int[] SampleData = { 1, 2, 3, 4, 5 };
 
 // 読み取り専用にも関わらず、int[]で受け取っている
 static void Output(int[] data)
 {
    foreach (var x in data)
    {
       Console.WriteLine(x);
    }
 }


 // 良いコード
 // 読み取り専用なら、IEnumerableにする
 static readonly IEnumerable<int> SampleData = { 1, 2, 3, 4, 5, };
 
 // 上記と同様に、引数の型もIEnumerableにする
 static void Output(IEnumerable<int> data)
 {
    foreach (var x in data)
    {
       Console.WriteLine(x);
    }
 }


XML

ポイント : XDocumentクラス(System.Xml.Linq名前空間)を使う。
C# 3.0/.NET 3.5にて、LINQが導入されたことで、データ処理においてIEnumerable<T>インターフェイスが特別な意味を持つようになった。
それに合わせて、XMLの読み書きのためにも、IEnumerableでXML要素一覧を読み出せるようなクラスが新たに追加された。

  • 以前の記述方法
    .NET 3.0以前では、XmlDocumentクラス(System.Xml名前空間)を使っていた。


  • 現在の記述方法
    .NET 3.5から、XDocumentクラスが追加された。IEnumerable<XElement>で要素一覧を読み出せるので、LINQ to Objectsが使える。


 var doc = XDocument.Load(filename);
 var ns = doc.Root.Name.Namespace;
 
 var titles = from x in doc.Root.Elements(ns + "section")
              select x.Attribute("title").Value;
 
 foreach (var title in titles)
 {
    Console.WriteLine(title);
 }


自動実装プロパティ

ポイント : フィールドをpublicにしてはいけない。自動実装プロパティを使用する
後からの変更に備えて、ただフィールドを読み書きするだけのプロパティを作ることがある。
下記のようにすれば、後から処理を加えることになっても、 クラスの利用側の再コンパイルは不要である。

 private int _x;
 
 public int X
 {
    get;
    set;
    //get { return _x; }
    //set { _x = value; }
 }


また、外部からは読み取り専用なプロパティを作る場合は、以下のように記述する。

 public int X
 {
    get;
    private set;
 }