1.自动属性(Auto-Implemented Properties)

//以前的写法 .net2.0
private string _userName;
public string UserName
{
get { return _userName; }
set { _userName= value; }
}
//现在 只适合3.5以上
public string_userName {get;set;}

2.隐式类型var

它是在编译已经能确定变量的类型,是根据后面的值自动推断类型,编译时把推断的类型替换掉var

看如下代码:
var v = new { Name="Tom",Age="",Email="Tom@163.com" };
Console.WriteLine(v.Name);
Console.WriteLine(v.Age);
Console.WriteLine(v.Email);
Console.ReadLine();
//var v.Name=”小明” ,隐式类型只能读取,不能赋值

3.对象初始化器与集合初始化器

对象初始化器

//写法一 DemoTest person = new  DemoTest { Name="xiaoming",Age=18,Sex="boy"};
//写法二 DemoTest person = new DemoTest("123") { Name="xiaoming",Age=18,Sex="boy"};
//二种写法都在什么时候用?
//写法一 是在调用类的默认构造函数时用
//写法二 是在调用类的默认有参构造函数时用

集合初始化器

List<DemoTest> list= new List<DemoTes> {
new DemoTest(){ Age=,Name="xiaoming",Sex="boy"},
new DemoTest(){ Age=,Name="xiaohua",Sex="girl"}
};

4.扩展方法

static void Main(string[] args)
{
List<string> list = new List<string>();
list.Contains//转到定义
}

这些带向下箭头的都是扩展的,那么我们转到定义(f12)看下,这个扩展定义在Enumerable类里面,是不是跟大家想的不

一样?一般都是转到List<T>本类里面,所以所有的扩展方法,都在静态类中

我们要写扩展方法的主要目的是什么?

当一个类型已经写好之后,需要给这个类型加一些方法,但是加这个方法的时候不能修改类型,不能修改这个类的源代码,那么大家会想直接修改源代码不就行了,假如.net2.0以前的版本list有一些方法是一个版本,你要是修改了可能有不兼容的问题

下面我们就自己写一个扩展方法

class Program
{
static void Main(string[] args)
{ //给NewClass加个扩展方法,输出18
NewClass newclass = new NewClass();
newclass.Age = ;
newclass.ShowMessage();
Console.ReadKey(); }
}
public class NewClass
{
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
public string Email
{
get;
set;
}
public void SayHello()
{
Console.WriteLine("Hello");
}
} //1.创建一个静态类
public static class DemoTest
{
public static void ShowMessage(this NewClass newclass)//这里必须加this,不加就是普通的方法
{
Console.WriteLine(newclass.Age);
}
}

下面我们给string加一个扩展方法:

class Program
{
static void Main(string[] args)
{
string str = "Hello";
int result = str.GetLength();
Console.WriteLine(result);
Console.ReadKey(); }
}
//1.创建一个静态类
public static class DemoTest
{
public static int GetLength(this string str)
{
//扩展方法不能访问类型中私有成员
return str.Length;
}
}

接下来我们用反编译看下:

扩展方法只是看起来像是某个对象的方法,从反编译我们可以看出实际上根本不是该对象的方法,其实就是调用了某个静态类中的方法。

C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法的更多相关文章

  1. C#语法糖之第一篇:自动属性&隐式类型

    今天给大家分享一下C#语法糖的简单的两个知识点吧. 自动属性:在 C# 4.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁. 客户端代码还可通过这些属性创建对象 ...

  2. C#中的隐式类型var——详细示例解析

    从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...

  3. [C#] 隐式类型var —— 示例解析

    从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...

  4. linq和隐式类型var

    隐式类型 var 强类型,声明的时候必须给变量赋值,编译器会根据值来确定其类型.只能出现在局部变量或脚本代码中. 使用范围: 简单类型:如int string等 复杂类型:如数组.类等 逻辑语句:fo ...

  5. 【C#】隐式类型var

    在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...

  6. Java中的自动类型转换/隐式类型转换

    整型.实型(常量).字符型数据可以混合运算.运算中,不同类型的数据先转化为同一类型,然后进行运算. 转换从低级到高级. 自动类型转换必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: sho ...

  7. C# var 隐式类型 var 用法 特点

    var 关键字是C# 3.0 开始,在方法范围中声明的变量: var有以下特点: * 1.var在编译器编译的时候根据初始值推断出其的类型          * 2.不能赋值除了初始值类型之外的其他类 ...

  8. C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数

    一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...

  9. .NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器

    开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也 ...

随机推荐

  1. web应用组成结构,web.xml的作用

  2. Java -- 内部类, 成员内部类,局部内部类,匿名内部类,闭包和回调, 枚举类

    1. 成员内部类分为  静态内部类 和 非静态内部类. 非静态内部类 和 外部类的其他成员一样处理, 非静态内部类可以访问外部类的private的属性,而外部类不能访问非静态内部类的属性,需要实例非静 ...

  3. OTSU大津法对图像二值化

    OTSU算法 (1)原理: 对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于背景的像素个数占整幅图像的比例记为ω0,其平均灰度μ0:前景像素个数占整幅图像的比例为ω1,其平均灰度为μ1 ...

  4. spring boot: scope (一般注入说明(一) @Autowired注解)

    实例一: DiConfig 文件: package di; import org.springframework.context.annotation.ComponentScan; import or ...

  5. python3与Redis连接操作

    Python3之redis使用   简介 redis是一个key-value存储系统,和Memcache类似,它支持存储的value类型相对更多,包括string(字符串),list(链表),set( ...

  6. Spring4自动装配(default-autowire) (转)

    原文地址:http://blog.csdn.net/conglinyu/article/details/63684957 Spring 自动装配 通过配置default-autowire 属性,Spr ...

  7. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用

    通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (2012-04-02 09:17:28) 转载▼   对于glLoadIdentity(), ...

  8. Arc071_F Infinite Sequence

    传送门 题目大意 给定一个数$n$,构造一个无限长的序列$A$,使得 $\forall i,j\geq n,A_i=A_j$ $\forall i<j<k\leq i+a_i,A_j=A_ ...

  9. A唐纳德先生和假骰子(华师网络赛)

    Time limit per test: 1.0 seconds Memory limit: 256 megabytes 在进行某些桌游,例如 UNO 或者麻将的时候,常常会需要随机决定从谁开始.骰子 ...

  10. POJ-2564 01背包问题

    #include"cstdio" #include"cstring" #include"algorithm" using namespace ...