.net基础扫盲--可变类型(var,dynamic)

之所以要谈及var和dynamic,是因为在使用EF框架和使用MVC的时候,会很频繁的用到他们,所以不得不提他们,以便在接触EF和MVC的时候能够很好的理解和熟练的应用.

先简单说一下var,虽被称作是可变类型,但他并不是一种若类型,只不过他是通过程序推断来确定类型的.

我们可以这么写:

       static void Main(string[] args)
        {
            var i = 10; //经过程序的推断,i最终被推断为 int整型
            var j = "10";//同样,经程序推断为字符型
            Console.WriteLine(i);
            Console.ReadKey();
        }

此后,i、j的类型就被认定,分别按照int、string来处理,不再可变,自然就成了强类型。

那我们哪些情况下使用var来申明变量呢?

很多情况下,我们不知道要用的变量是什么类型,或者我知道现在用的是什么类型,但是写起来非常的麻烦,他很长,或者很复杂.就可以用var来声明,让系统自己来推断变量的类型.在用EF架构的时候,很典型的,我们会频繁的用到var。

跟var不同,dynamic是一个纯可变类型,更是一种若类型,在程序运行的时候,你可以把任意一种类型的变量赋值给他,此时他的类型就会随之发生改变。

我们可以这样写:

        static void Main(string[] args)
        {
            //var i = 10; //经过程序的推断,i最终被推断为 int整型
            //var j ="10";//同样,经程序推断为 字符型
            //Console.WriteLine(i);
            //Console.ReadKey();

            dynamic i = 10;
    <span style="white-space:pre">	</span>    Console.WriteLine(i);
            i = "10";
            Console.WriteLine(i);
            i = DateTime.Now();
            Console.WriteLine(i);
        }

都不会报错。此时i,没有一个确定的类型,你可以任意的修改它,他也会随之变化,典型的弱类型。

我们可能不会经常用到这个关键字去声明变量,但是我们在学习mvc的时候,会大量的用到,以后再看到的时候知道,他声明的变量,在运行时,会发生变化即可了。总的来说:对于这两个可变类型,var并不是若类型,而是类型推断,在编译阶段完成。dynamic是一种弱类型,在运行阶段,根据变量的值确定变量的类型。

时间: 2024-10-22 20:06:18

.net基础扫盲--可变类型(var,dynamic)的相关文章

oc基础 不可变字符串的创建和使用

oc基础  不可变字符串的创建和使用 简介:下面都是字符串基本用法. 1.字符串的创建 //创建oc常量字符串 NSString *str=@"hello world!"; NSLog(@"%@",str); //用c语言的字符串来创建oc的字符串 char *ch="hello world C"; NSString *str2=[[NSString alloc] initWithUTF8String:ch]; NSLog(@"%@&q

当类型为dynamic的视图模型遭遇匿名对象

当年在ASP.NET MVC 1.0时代我提到,在开发时最好将视图的Model定制为强类型的,这样可以充分利用静态检查功能进行排错.不过有人指出,这么做虽然易于静态检查,但是定义强类型的Model类型实在是太麻烦了,因此也出现了基于SmartBag等折衷方案.强类型是一种极端方案,而在C# 4.0中我们又可以使用另一个极端,那就是让Model成为dynamic类型,这样在视图中便可以完全自由地获取数据了.不过,在使用匿名对象的情况下视图会抛出奇怪的"无法找到成员"异常,我们必须解决这个

redis基础的字符串类型

redis —— 第二篇 基础的字符串类型 我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数组的,然后你可能会想,那还不简单,当我执行如下命令,肯定是直 接塞给char[]数组的. 如果你真的这么想的话,会有几个问题就要过来砍你了,先我们来找一个redis手册,http://doc.redisfans.com/ 第一:如果你每次都执行Append函数,那是不是redis的char[]每次都需要再次扩容,这样是不是每次都是耗时操作呢? 第二:如果你每次执行

python可变和不可变类型

时长总结一下Python基础知识,动手写一写不容易忘记 * Python的数据类型可以分为可变与不可变类型两大类 可变类型:列表 ,字典 不可变类型:数值,字符,元组 * 对不可变类型进行赋值的时候其实是创建了一个新的不可变对象,并将指向原来不可变对象的变量指向这个新的不可变对象,这个时候原来的不可变对象就失去了指向它的变量 ,如果没有新的变量指向它的话,这个不可变对象就会被回收 eg: 1 i=1 2 i+=1 3 i 4 2 实际上此处的i+=1并不是真的在原来的int对象上进行加1,而是重

[Python]可变类型,默认参数与学弟的困惑

一.学弟的困惑 十天前一个夜阑人静.月明星稀的夜晚,我和我的朋友们正在学校东门的小餐馆里吃着方圆3里内最美味的牛蛙,唱着最好听的歌儿,畅聊人生的意义.突然,我的手机一震,气氛瞬间就安静下来,看着牛蛙碗里三双贪婪的筷子,我犹豫了:不——我的肉…但是本着不让人久等的原则,我不舍地放下了筷子.点亮屏幕,我的眉头不禁紧锁,事情好像并不简单… 什么,还上升到了去医院的程度?现在的年轻人怎么了,怎么那么不注意安全,嗨,真是一届不如一届了,不过也好,没受伤就好…正当我沉浸在我自己的瞎想时,一张图片紧接着医院那

javascript基础扫盲

JavaScript基础扫盲 null和undefined 非十进制的表示方法 强制类型转换 运算 null和undefined null是一个是非来表示一个空对象的,故 typeof 的返回值是object undefined字面义为未定义,当遇到声明一个变量,但没有赋值的时候,typeof的类型即为undefined 非十进制的表示方法 十六进制:以0x开头 八进制:以0开头 二进制:以0b开头 进制转换如果以指定进制规定的格式书写是没有问题的 parseInt有平台兼容的问题 直接使用pa

8.02 PY基础之数字类型的内置方法

目录 PY基础之数字类型的内置方法 整型内置方法(int) 定义 常用操作+内置方法 存一个值or多个值 有序or无序 可变不可变 浮点型内置方法(float) PY基础之数字类型的内置方法 整型和浮点型统称为数字类型 整型内置方法(int) 定义 可以使用int()方法将纯数字的字符串转为十进制的整型 age = '19' age = int(age) print(age) # 19 type(age) = int x = int('11.1') print(x) # 报错 常用操作+内置方法

《手把手教你》系列进阶篇之2-python+ selenium自动化测试 - python基础扫盲(详细教程)

1. 简介 这篇文章主要是分享讲解一下,如何封装自己用到的方法和类.以便方便自己和别人的调用,这样就可以避免重复地再造轮子. 封装(Encapsulation)是面向对象的三大特征之一(另外两个是继承和多态),它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问. 就好比使用计算机,我们只需要使用计算机提供的键盘,就可以达到操作计算机的目的,至于在敲击键盘时计算机内部是如何工作,我们根本不需要知道. 封装机制保证了类内部

linux 可变类型与不可变类型

Python的每个对象都分为可变和不可变,主要的核心类型中,数字.字符串.元组是不可变的,列表.字典是可变的. 可变类型和不可变类型有些地方区别很大,注意区分. 对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收). 不可变类型 以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象. 可以