匿名类型

什么是匿名类

匿名类是不能有名字的类,它们不能被引用,只能在创建时用New语句来声明它们。匿名类的声明是在编译时进行的,实例化在运行时进行,这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。

    例如:

Var person = new { Name=”Zhangsan”, Age=26};

  • 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型
  • 类型名由编译器生成,并且不能在源代码级使用。每个属性的类型由编译器推断。
  • 可通过使用 new 运算符和对象初始值创建匿名类型
  • 匿名类型通常用在查询表达式的 select 子句中,以便返回源序列中每个对象的属性子集(Linq 中使用的比较多)

 Var隐式类型

 

  • 在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断。
  • 使用隐式类型和使用其他显式类型的效果是一样的,只是在编译的过程IDE自动判断类型,所以很多时候我们不用考虑变量的具体类型。

在使用隐式类型var的时候,需要遵循几个规则:

  1. var类型的值必须是局部变量或静态变量
  2. var变量在声明之前必须被初始化
  3. 变量的值不能为null(这样编译器就不能判断类型了)
  4. var变量不能为一个方法或方法组
  5. 不能用来声明参数类型

 

什么是匿名数组

  • 可通过将隐式键入的本地变量与隐式键入的数组相结合创建匿名键入的元素的数组。
  • 数组成立条件:属性名字和属性存储的值的类型以及属性个数必须全部相同

例如:

var obj = new[] { new { Name = "zhang", Age = 12 }, new { Name = "wang", Age = 22 } };

 

什么是匿名方法

在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法。  C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式。  有一种情况下,匿名方法提供了 Lambda 表达式中所没有的功能。  您可使用匿名方法来忽略参数列表。  这意味着匿名方法可转换为具有各种签名的委托。  这对于 Lambda 表达式来说是不可能的。

  • 匿名方法不能访问外部范围的 ref 或 out 参数
  • 在“匿名方法块”中不能访问任何不安全代码
  • 在 is 运算符的左侧不允许使用匿名方法

 

实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 匿名方法
{
    class Program
    {
        static void Main(string[] args)
        {
            {
                //利用委托实现两整数相加并输出他们的和
                Func<int,int,int> func = Sum;
                var result = func(1, 2);
                Console.WriteLine($"1+2={result}");
            }
            {
                //利用匿名方法实现两整数相加并输出他们的和。
                Func<int, int, int> func = (a, b) => { return a + b;};
                var result = func(1, 2);
                Console.WriteLine($"1+2={result}");
            }
            {
                //利用泛型委托Func实现两整数相加并输出他们的和
                Func<int, int, int> func = (a, b) => { return a + b; };
                var result = func(1, 2);
                Console.WriteLine($"1+2={result}");
            }
            {
                //利用泛型委托Action实现两整数相加并输出他们的和
                Action action = () =>
                {
                    int a = 1;
                    int b = 2;
                    Console.WriteLine($"{a}+{b}={a + b}");//输出a+b的结果
                };
                action();
            }
           
            {
                //如上至少有两过以上的过程应用Lamda表达式。
            }
            Console.ReadKey();


        }

        static int Sum(int i,int j)
        {
            return i + j;
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值