zoukankan      html  css  js  c++  java
  • 《CLR Via C# 第3版》笔记之(十一) 匿名类型和元组

    匿名类型使得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)匿名类型是引用类型,编译器会生成相应的class,而不是struct

    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#的方式命名的(即Item1,Item2……)

    2)写Tuple和用Tuple的人必须对Item#属性放回的内容有个清楚的了解

    3)Tuple类型可以作为方法的参数和返回值

  • 相关阅读:
    mysql自动补齐
    重置oracle 11G的system、sys密码《亲测》
    细说业务逻辑(前篇)<转>
    当我们把这么一个“狭义的概念”与“这个概念本身”等同起来时,误会、迷茫、困惑、不屑就出现了。
    设计模式就三个准则
    面向对象编程(OOP)的三大特点
    在计算机中,“透明”一词的理解。
    关于ArrayList中添加对象的一个有趣问题~~~~
    MyEclipse 代码自动提示功能失效 提示No Default Proposals 或 no completions available 的解决方法
    面向对象的三大基本特征
  • 原文地址:https://www.cnblogs.com/wang_yb/p/2100788.html
Copyright © 2011-2022 走看看