c#进阶学习--匿名类,var,dynamic

一、概述

     本篇主要讲匿名类的用法,匿名类相对于普通的类来说最大的优点就是方便,无需提前声明,需要用到的时候随时可以创建一个相应类型的对象,无需提前创建任何东西,这使得代码编写的过程变得异常灵活与方便。

 

二、类的声明与创建

   在讲匿名类之前我们需要先了解普通类是如何创建的。

 1.类的创建

    class test
    {
       public int x = 0;
       public int y = 1;
       public string text = "123";
    }

这里创建了一个test类,类里面定义了三个变量

2.类的实例化

 test ts = new test();

3.或者定义实例化类型的初始变量

 test ts = new test() { x=2,y=3,text="456"};

4.再进一步修改

var ts = new test() { x=2,y=3,text="456"};

在这里c#为了简化我们的代码编写,并使得编码变得更加灵活,就允许创建一个临时的类,无需进行任何的提前声明,并且编译器会自动找到最合适的变量类型来承接匿名类中的变量.

var ts=new {x = 2, y = 3, text = "456" };

这样声明出来的类统称为匿名类.匿名类只能用泛型来进行承接,调用匿名类中的变量时与非匿名类完全相同,编译器会自动匹配到相应的变量.

var ts = new { x=2,y=3,text="456"};
int x = ts.x;

但是这样出来的匿名类无法直接以参数的形式传递到其他的方法中,因为泛型var无法直接当做参数的类型来进行方法之间的数据传递工作因此我这里考虑用dynamic来进行数据的接收.

dynamic是一个很特殊的类型,编译器不会检测dynamic修饰的变量的正确性,因此我们可以用dynamic来接收匿名类的参数,并且可以直接调用匿名类中的变量而不会报错.

var ts = new { x=2,y=3,text="456"};
test(ts);


public static void test(dynamic ts)
{
  int x= ts.x;
}

dynamic在.net4.0以上的版本才能使用,在使用dynamic的时候可能会报异常 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入

解决方法

以文本的方式打开项目文件(.csproj)并在ItemGroup节点加入如下语句,重新打开项目即可:

<Reference Include="Microsoft.CSharp" />

  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>

 

三、匿名类存在的意义

   匿名类在很大程度上方便了代码的编写工作,并在某些地方增加了代码的可阅读性,此外匿名类也作为linq表达式的重要输出手段.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

why070809123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值