隐含类型局部变量

隐含类型的局部变量是用var关键字来声明的,如下:

var i = 123;
var h=123.123;
var s = “oec2003";
var intArr = new[] {1,2,3,4} ;
var a = new[] { 1, 10, 100, 1000 };

乍一看有点像javascript中的声明方式,虽然关键字一样但是有着本质区别。

在c#3.0中用var关键字声明的变量被赋值后,在编译时编译器会根据变量值的类型自动推断出变量的类型。所以仍然是强类型,这点和object不同。其实var 关键字并不是一个具体的类型,只是起到了一个占位符的作用,编译后将替换成相应的类型。要注意的一点是用var声明的变量一定要赋初始值,否则会出现编译错误,因为如果不赋值就无法根据值来推断变量的类型。

var只能声明局部变量,而且可以在foreach中使用,如:

var nums=new []{1,2,3,4,5};
foreach(var i in nums)
{}

扩展方法

这是个非常有用的特性,扩展方法允许我们在不改变源码的情况下添加现有类型中的实例方法。扩展方法所在的类必须为静态类。如下:

public static class oec2003Extensions
{public static bool IsValidEmail(this String s){Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");return regex.IsMatch(s);}
}

上面的IsValidEmail静态方法在静态类oec2003Extensions类中,这个类可以在任何的名称空间下,在要用的地方引用名称空间就行。IsValidEmail方法的作用是用来验证电子邮件。方法中有三个参数:this String s 。this只是一个编译上的要求,作为一个提示来告诉编译器此方法有可能作为扩展方法来使用;String就是我们需要扩展的类型;s则为要验证邮件的内容。下面来看看怎样来使用此扩展方法。

protected void Button2_Click(object sender, EventArgs e)
{if (this.TextBox1.Text.Trim().IsValidEmail()){Response.Write("email is right");}else{Response.Write("email is error");}
}

是不是很神奇,在string类型中就多了一个刚才添加的IsValidEmail方法,可以直接调用,用来实现邮件地址的验证。

转载于:https://blog.51cto.com/oec2003/1041029

C#3.0学习(1)---隐含类型局部变量和扩展方法相关推荐

  1. C# 3.0新特性系列(1):隐含类型局部变量

    一.隐含类型局部变量简介 在C#3.0中增加了很多新的语言特性,如果有一个局部变量被声明为var,这个声明被视为隐含类型局部变量声明,然后由编译器根据局部变量初始化表达式来推断变量的类型.如下面的声明 ...

  2. Kotin学习手记——类、接口、扩展方法、空类型

    定义类和构造方法: class SimpleClass(var x: Int, val y: String){}//创建类不需要new关键字 val simpleClass = SimpleClass ...

  3. .Net6.0系列-6 .Net 6LinQ(二)常用扩展方法

    一.本节学习LinQ的扩展方法 LinQ的where返回的IEnumerable,所有的括号中都可以写lamada表达式,list,数组等都可以用LinQ 以下这些方法都是可以和Where一起使用的 ...

  4. C# 3.0 —— 扩展方法

    扩展方法是C# 3.0新加入的特性,允许我们在不改变源代码的情况下扩展(即填加)现有类型中的实例方法,也给我们提供了另外一种扩展类型行为的方法(其它的方法为继承.组合.反射). 下面我们来看一个代码示 ...

  5. [易学C#]C#3.0语言新特性之扩展方法

    当我们需要对已有类的功能进行扩展时,我们通常会想到继承,继承已有类,然后为其加入新的行为.而C# 3.0中加入的扩展方法(Extension Methods)特性,则提供了另一种实现功能扩展的方式. ...

  6. TensorFlow2.0学习

    文章目录 一.TensorFlow的建模流程 1.1 结构化数据建模流程范例 1.1.1 准备数据 1.1.2 定义模型 1.1.3 训练模型 1.1.4 评估模型 1.1.5 使用模型 1.1.6 ...

  7. 从0学习C语言(第3天)---- C语言初探、把C玩弄于股掌之中的思维(思维无限扩展法)

    从0学习C语言(第3天)---- C语言初探.把C玩弄于股掌之中的思维 前言:在开始今天的学习之前,我们先去明白一个事情,那就是:我们学习这个东西,想让自己达到什么样的境地,怎么样才能让自己变的很厉害 ...

  8. python 学习指南_Python类型检查终极指南

    python 学习指南 In this guide, you will get a look into Python type checking. Traditionally, types have ...

  9. Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用

    文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...

  10. [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...

    本文是为后面的学习之路做铺垫,简单介绍下企业库中的Validation模块的一些相关知识,包括Validation模块的简介.用途.使用方法.默认提供的多种验证器的介绍等. 一.简介及用途 在实际的项 ...

最新文章

  1. 【转】Android 面试题笔记-------android五种布局及其作用
  2. iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处
  3. 运用C#生成docx格式的报表
  4. 【转】海量数据相似度计算之simhash和海明距离
  5. 我的第一个windows应用程序
  6. MATALB(三)绘图命令
  7. Java并发包中Semaphore的工作原理、源码分析及使用示例
  8. SAP License:SAP HANA CLOUD MM 实施的坑
  9. Win32项目生成的程序exe图标显示异常的问题
  10. 在线中英文符号转换工具
  11. Apache IoTDB 物联网数据库引擎
  12. 商品分类无限层级递归
  13. 手机邮箱服务器设置安全类型,手机邮箱设置
  14. 定时器的用法以及pwm的调速
  15. 几何算法合集(3D)
  16. (原创)广度优先搜索解决最短路径问题
  17. 你的独立思考能力正在慢慢退化
  18. Java 操作 ElasticSearch
  19. 三维地图打造数、实融合底座
  20. uniapp h5、app引用外部在线js

热门文章

  1. 星云的Linux专用学习手册
  2. 利用 Google Chart API 生成二维码大小不一致
  3. 关于微信支付接口,curl错误代码58
  4. 大数据学习总结(4)参考splunk架构
  5. 进程与线程的区别(网络摘抄)
  6. 使用bootbox.js(二级务必提交书面和数字到数字中国)
  7. tyvj p1016 装箱问题( 简单DP 01背包)
  8. SQL Server误区30日谈-Day28-有关大容量事务日志恢复模式的误区
  9. 别再造假数据了,来试试 Faker 这个库吧!
  10. Could not find an NgModule. Use the skip-import option to skip importing in NgModule.