目录:
- 命名参数
- 隐式类型
- 匿名类型
- dynamic
- 可空类型
- 扩展方法
- 泛型方法
1.命名参数
参数顺序一致," : " 指定参数。
private static string ShowComputer(string cpu, string ram, string disk) { return "My computer ... Cpu:" + cpu + " Ram:" + ram + " Disk:" + disk + " "; } static void Main(string[] args) { Console.WriteLine(ShowComputer("i3 370M","2G","320G")); Console.WriteLine(ShowComputer(disk: "320G", cpu: "i3 370M", ram: "2G")); Console.Read(); } |
2.隐式类型
必须在声明的同时赋值,会根据所赋值来自动推断类型
var a=1; |
3.匿名类型
var stu=new{},通过结合对象初始化器和类型推断,可以创建简单的数据存储对象
var oddsAndEnds = new[]{ new {Name="MVC" , Category="Pattern"} }; |
4.dynamic类型(动态类型)
静态:编译报错(int i=1),动态:运行报错(dynamic i=1)
static void Main(string[] args) { dynamic c = new Person(); c.Name = "abc"; c.Age = 30; //编译时不报错,运行时报错 Console.WriteLine(c.Name); } |
注意:var和Dynamic的区别:
var只能用于局部变量,不能用字段,参数,声明时必须初始化,类型在编译时就确定了。
Dynamic可用于类型的字段,方法参数,方法返回值等,可以赋值或被赋值任何类型,不需要类型转换,益于动态特性
5.可空类型
泛型 System.Nullable<T> 变量名 或 快捷语法: int? num1=null; 或 int num2 = num1 ?? 0; 运算符分配默认值、大类型不能赋小类型
6.扩展方法(this string str,多个)
(1)创建一个静态类.Ext
(2)创建静态方法参数(this 类名 name)--指定要扩展的类
(3)自定义规则
能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型
using System.Text.RegularExpressions; //正则表达式命名空间 namespace Extension_Method { //类必须为static的 public static class StringHelper { //扩展方法必须为静态的 //扩展方法的第一个参数必须由this来修饰(第一个参数是被扩展的对象) public static bool isEmail(this string _string) { return Regex.IsMatch(_string, @"^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$"); } } public static void main(string[] args) { string str = "czx@123.com"; Console.WriteLine(str.isEmail()); //调用 } } |
7.泛型方法(T)
方法名<T>(T a,T b); 调用 方法名(int)(1,2) 或者 方法名(1,1.2)
通过泛型来约束方法中的参数类型,也可以理解为对数据类型设置了参数。使用泛型后,方法中的数据类型则有指定的泛型来约束,即可以根据提供的泛型来传递不同类型的参数。
static void Main(string[] args) { //将T设置为double类型 Add<double>(3.3, 4); //将T设置为int类型 Add<int>(3, 4); } //加法运算 private static void Add<T>(T a, T b) { double sum = double.Parse(a.ToString()) + double.Parse(b.ToString()); Console.WriteLine(sum); } |