C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法
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、对象初始化器与集合初始化器、扩展方法的更多相关文章
- C#语法糖之第一篇:自动属性&隐式类型
今天给大家分享一下C#语法糖的简单的两个知识点吧. 自动属性:在 C# 4.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁. 客户端代码还可通过这些属性创建对象 ...
- C#中的隐式类型var——详细示例解析
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...
- [C#] 隐式类型var —— 示例解析
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...
- linq和隐式类型var
隐式类型 var 强类型,声明的时候必须给变量赋值,编译器会根据值来确定其类型.只能出现在局部变量或脚本代码中. 使用范围: 简单类型:如int string等 复杂类型:如数组.类等 逻辑语句:fo ...
- 【C#】隐式类型var
在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...
- Java中的自动类型转换/隐式类型转换
整型.实型(常量).字符型数据可以混合运算.运算中,不同类型的数据先转化为同一类型,然后进行运算. 转换从低级到高级. 自动类型转换必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: sho ...
- C# var 隐式类型 var 用法 特点
var 关键字是C# 3.0 开始,在方法范围中声明的变量: var有以下特点: * 1.var在编译器编译的时候根据初始值推断出其的类型 * 2.不能赋值除了初始值类型之外的其他类 ...
- C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...
- .NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器
开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也 ...
随机推荐
- AngularJs 相应回车事件
最近做项目,要用到AngularJs,之前也有用过一点点,但仅限于数据的绑定,这次项目要整个前端需要使用这个框架,可能是不熟悉的原因,感觉这代码搞起来非常的不便利,:现总结一个响应回车事件: < ...
- Android 布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- mq_学习_00_资源帖
一.精选 二.参考资料-基础 JMS(Java消息服务)入门教程 Sun Java System Message Queue 3.7 UR1 技术概述 消息队列-推/拉模式学习 & Activ ...
- BEC listen and translation exercise 37
You're supposed to do that before 10.30 in the morning, but obviously, if it's an emergency, you can ...
- BEC listen and translation exercise 35
高中听力: At five o'clock, we have afternoon tea, but we don't have it in the kitchen. Father's Day is t ...
- node.js 安装及配置(hello world)及 node 的包管理器(npm)
下载地址:Download | Node.js,无脑下一步安装即可: 安装时,会自动将 node 可执行文件路径添加进 Path 内,这样进入 cmd 命令行,以查看 node 的安装版本: > ...
- POJ1741 Tree(树的点分治基础题)
Give a tree with n vertices,each edge has a length(positive integer less than 1001).Define dist(u,v) ...
- C#连接solr时提示 java内存异常 (jetty和tomcat哪个更High) java.lang.OutOfMemoryError
C#连接solr时提示 java内存异常 java.lang.OutOfMemoryError 时间:20180130 09:51:13.329,消息:异常消息<?xml version=& ...
- RenderMonkey基本使用方法
http://www.cnblogs.com/mixiyou/archive/2009/10/05/1578208.html 楔子: 差不多从年中开始由于工作需要,开始研究Direct3D,这是继大二 ...
- Log4Net日志记录介绍
原文地址 : http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010 简介 log4net库是Apache log4j框架在Microsoft . ...