博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#3.0 语言基础扩充
阅读量:5150 次
发布时间:2019-06-13

本文共 1837 字,大约阅读时间需要 6 分钟。

隐含类型局部变量        

var i = 5;            var h = 13.4;            var s = "C Sharp";            var intArr = new[] {1,2,3 };            var a = new[] {1,10,100,1000 }; //int[]

var为关键字,可以根据后面的初始化语句自动推断类型。

初始化语句必须为表达式,且编译时可推断类型。

var声明的仅限于局部变量,亦可用于foreach、using等语句中。

数组也可以作为隐含类型。

扩展方法

class Program    {        static void Main(string[] args)        {                       //扩展方法            string s = "hello world";            s.Foo();        }    }    public static class Extensions     {        public static void Foo(this string s)        {             //*****            Console.WriteLine("Foo");            Console.Read();        }    }

 

分析:

s.Foo() 编译器会由实例方法转换为静态方法:Extendsion.Foo(s)。

实例方法被编译的分析:

有一个类:class Person{public void Bar();}

调用:Person p=new Person(); p.Bar();

编译器会把上面的方法转换为void Bar(Person this),然后调用:Bar(p)         

这就是我们所说的实例函数里面有一个隐含的this指针。bar方法虽然没有参数,但是在编译的时候,编译器会把它编译出一个参数来,就是它所在的类型(它在person类里面),编译器编译出来的是一个全局函数,有一个this指针,所以在实例函数里可以访问this指针,但是在静态函数里不能访问静态指针。静态函数没有按照这个规则来编译。

其实在编译完之后,根本就不知道所谓的对象、实例函数、静态函数。所有的东西都是全局函数。

总结(扩展一个类的方法):

1、继承它。

2、用包含(组合)的方法,把一个类做为另一个类的字段。

3、反射,可以动态的给一个类添加更多的行为,运行时的方式。

4、扩展,只允许添加不允许更改。(允许我们在不改变源代码的情况下扩展【即添加】现有类型中的实例方法)

对象与集合初始化器

 //对象与集合初始化器

    public class Point
    {
        public int X { get; set; }
        public int Y { get; set; }
    }

使用:

var test = new Point { X = 0, Y = 1 };

 //集合初始化器

List<int> num = new List<int> { 0,1,2,3,4,5,6};

 

       对象与集合初始化器要点

对象初始化器实际上利用了编译器对对象中对外可见的字段和属性进行按序赋值。

集合初始化器会对初始化器中的元素进行按序调用ICollection<T>.Add(T)。

注意对象初始化器和集合初始化器中成员的可见性和调用顺序。

对象与集合初始化器同样是一编译时技术。

匿名类型

//匿名类型            var p1 = new {Name="LiuShuai",Age=23 };            var p2 = new { Name="Frank",Age=23};            p1 = p2;            Console.WriteLine(p2.Name);            Console.Read();

大家看一下运行的结果:

 

可以使用new关键字调用匿名初始化器创建一个匿名类型的对象。

匿名类型直接继承自System.Object。

匿名类型的成员是编译器根据初始化器推断而来的一些读写属性。

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/dyllove98/p/3223594.html

你可能感兴趣的文章
Swift版音乐播放器(简化版),swift音乐播放器
查看>>
iOS中AutoLayer自动布局流程及相关方法
查看>>
使用Git工具下载android源码---带步骤
查看>>
内容版本SecureCRT脚本
查看>>
宋体光标vim高亮显示当前行,列
查看>>
Java集合---ConcurrentHashMap原理分析
查看>>
ElasticSearch客户端注解使用介绍
查看>>
矢量空间存储、栅格空间存储 分布式存储的区别
查看>>
JSON.stringify实战用法
查看>>
#ifndef详解
查看>>
C++11 —— 解包 tuple 参数列表
查看>>
结对编程收获
查看>>
最长回文子串(Manacher)
查看>>
古罗马子串加密
查看>>
TensorBoard:可视化学习
查看>>
图文说明Win10上在VitualBox安装Ubuntu
查看>>
C#终于支持可选参数了!
查看>>
帮朋友写的一个自定义选择框
查看>>
CODE[VS] 2221 搬雕像 ——2011年台湾高级中学咨询学科能力竞赛
查看>>
团队冲刺第七天
查看>>