《CLR Via C#第3版》笔记之(十一)-匿名タイプと元组

2731 ワード

匿名タイプはC#をよりダイナミックにします.メタグループは以前pythonを見たときから知っていたタイプで、Listタイプと似ていますが、その中の要素は可変ではありません.
主な内容:
  • 匿名タイプ紹介
  • ユニットの紹介
  • 1.匿名タイプの紹介
    匿名タイプも実はメタグループのようで、定義してから中の要素の名前と個数を変更することはできません.
    匿名タイプのコードを使用するのは簡単です.
    using System;
    
    namespace cnblog_bowen
    {
        public sealed class CLRviaCSharp_11
        {
            static void Main(string[] args)
            {
                var v = new { Name="my name", Age=100 };
    
                Console.WriteLine("Name={0}, Age={1}", v.Name, v.Age);
                Console.ReadKey(true);
            }
        }
    }

    最初に定義したときに要素の名前を指定します.要素のタイプはシステムによって自動的に推定されます.定義が完了すると、インスタンスとして使用できます.
    visual studioでは、匿名タイプのプロパティ名を「スマートセンシング」することもできます.
    匿名タイプのルール:
    1)2つの匿名タイプの構造が完全に同じである場合、それらの間で値付け操作を行うことができる
    2)匿名タイプは参照タイプであり、コンパイラはstructではなく対応するclassを生成します.
    3)匿名タイプもObjectクラスから派生しているが,Objectタイプを匿名タイプに戻すことはできない.
    4)匿名タイプはメソッドのパラメータと戻り値として使用できません.
    上記3)と4)の理由は,匿名タイプの名前はコンパイラが一定の規則に従って生成しているため,コードを書く際に我々が定義した匿名タイプの具体的な名前が分からないためである.
    したがって,Objectから匿名型への移行はできず,メソッドのパラメータ型や戻り値型を指定することもできない.
    2.タプルの紹介
    C#の汎用タプルタイプは、さまざまなパラメータタイプと個数のタプルを作成するために複数のバージョンをリロードします.
    メタグループを作成する方法は次のとおりです.
    namespace System
    {
        // Summary:
        //     Provides static methods for creating tuple objects.
        public static class Tuple
        {
            public static Tuple<T1> Create<T1>(T1 item1);
            public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2);
            public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3);
            public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4);
            public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5);
            public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6);
            public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7);
            public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8);
        }

    メタグループは作成後は読み取り専用で、その要素を変更することはできません.
    メタグループのいくつかのルール:
    1)タプル内のフィールドはすべてItem#で命名されています(すなわちItem 1,Item 2......)
    2)Tupleを書く人とTupleを使う人は、Itemの属性をはっきり理解しなければならない
    3)Tupleタイプはメソッドのパラメータと戻り値として使用できる