复习.Net高级

索引器:本质是封装了get,set方法,可以是只读或只写(在get或set前加上private),字符串是只读索引。

密闭类与静态类:

第一、密闭类是修饰为sealed的类,sealed不能有子类。String类无法被继承,因为String被声明了sealed。

第二、声明为static的类,不能实例化,只能定义static成员。通常用它定义扩展方法。

第三、C#3.0特性:扩展方法。声明静态类,增加一个静态方法,第一个参数是被扩展类型的标记为this,然后在其他类中可以直接调用。

 1 static void Main(string[] args)
 2 {
 3   string str = "Hello World!";
 4   str.ShowMsg(str);
 5 }
 6
 7 //扩展方法
 8
 9 static class MyString
10 {
11   public static void ShowMsg(this string a,string msg)
12   {
13     Console.WriteLine(msg);
14   }
15 }

给string增加一个ShowMsg()

深拷贝、浅拷贝:

深拷贝就是重新new一个对象,然后把之前的那个对象的属性值再重新赋值给这个用户。

 1 static void Main(string[] args)
 2 {
 3   MyCopy copy1 = new MyCopy();
 4   copy1.Name = "蛋蛋";
 5   copy1.Age = 18;
 6   MyCopy copy2 = copy1;//浅拷贝
 7   Mycopy copy3 = new MyCopy();
 8   copy3.Name = copy1.Name;
 9   copy3.Age = copy1.Age;//浅拷贝
10 }
11
12 class MyCopy()
13 {
14   public int Name{get;set;}
15   public int Age{get;set}
16 }

深拷贝、浅拷贝

CTS,CLS,CLR

CTS(Common Type System)通用数据类型

CLS(Common Language Specification)通用语法规范

CLR(Common Language Runtime)公共语言运行时

关于相等Equals:查看判断两个对象是否是同一个对象要用object.ReferenceEquals();

字符串暂存池:

1 string s1 = "rupeng";
2 string s2 = "rupeng";
3 stirng s3 = "ru"+"peng";
4 stirng s4 = new stirng(s1.ToCharArray());
5 string s5 = new string(new char[]{‘r‘,‘u‘,‘p‘,‘e‘,‘n‘,‘g‘});

判断字符串对象个数

s1,s2.s3是同一个字符串对象,在内容相同的情况下只有new才能产生一个一个新的字符串对象。

ref,out

ref的作用是“方法内部修改外部变量的引用”

out的作用是“方法内部给外部变量初始化,相当于一个函数多个返回值”

 1 static void Main(string[] args)
 2 {
 3   int i =1;
 4   int j = 2;
 5   int k;
 6   int result = Template(i,j,out k);
 7   Console.WriteLine(result+","+k);
 8   Console.ReadKey();
 9 }
10 public static int Template(int i,int j,out int k)
11 {
12   i=i+j;
13   j=i-j;
14   i=i-j;
15   k=j;
16   return i;
17 }

ref,out

委托和事件

委托:委托是一种可以指向方法的数据类型。

1 delegate void MyDel(int n)//声明委托的方式:delegate 返回值类型 委托类型(参数),注意这里除了delegate,剩下部分和声明一个函数一样,但是MyDel不是函数名,而是委托类型名
2 MyDel sp = new MyDel(SayHello)//SayHello方法需要和MyDel的参数、返回值一样。简化方法MyDel sp = SayHello;

.Net中内置了两个泛型委托Func、Action,Func是有返回值的委托,Action是没有返回值的委托。

Action<string> ac = new Action<string>(Greeting);//没有返回值的内置委托
ac("蛋蛋");//调用Greeting方法

Func<string,string> fu = new Func<string,string>(GreetingForR);//有返回值的内置委托
string msg = fu("建国");

static string GreetingForR(string name)
{
  return name+"你好";
}
static void Greeting(string name)
{
  Console.WriteLine(name+"你好");
}

匿名方法

定义语法:MyDelegate p = delegate(int s){s=10;};

lambda表达式

 1 Action<int> a1 = delegate(int i){Console.WriteLine(i);};
 2
 3 Action<int> a2 = (int i) =>{Console.WriteLine(i);}
 4
 5 Action<int> a3 = (i)=>{Console.WriteLine(i);};
 6
 7 Action<int> a4 = i=>{Console.WriteLine(i);};//只有一个参数可以省略小括号,多个参数不行
 8
 9 Func<int,int,string>  f1=delegate(int i,int j){return "结果是"+(i+j);};
10
11 Func<int,int,string> f2=(i,j)=>"结果是"+(i+j);

事件

事件语法:event Mydelegate mdl;

 1     delegate void MyDel();
 2     class Program
 3     {
 4
 5         static void Main(string[] args)
 6         {
 7             person p = new person();
 8             p.QingZhu += ShowMsg;//加了event关键字实现事件机制的好处:用了event事件,不可以修改事件已经注册的值;不可以冒充进行事件通知了。只能+=、-=!
 9             p.age = 24;
10             Console.ReadKey();
11         }
12         static void ShowMsg()
13         {
14             Console.WriteLine("今年是你的本命年!恭喜你");
15         }
16     }
17     class person
18     {
19         private int Age;
20         public int age
21         {
22             get
23             {
24                 return age;
25             }
26             set
27             {
28                 if (value % 12 == 0)
29                 {
30                     if (QingZhu != null)
31                     {
32                         QingZhu();//执行事件
33                     }
34                 }
35             }
36         }
37         public event MyDel  QingZhu;
38     }

案例:定一个Person类,定一个监听年龄变化的事件,当本命年的时候祝贺一下。触发事件的地方要判断一下是不是事件null

委托和事件的总结

委托的作用:占位,在不知道要执行的方法的具体代码时,可以先用一个委托变量来替代方法调用。在实际调用之前,需要为委托赋值,否则为null。

事件的作用:作用与委托变量一样,只是功能上有更多限制。

二者关系:事件由一个私有的委托变量和add_***和remove_***方法组成

反射

获取类信息对象Type

从对象获取:Type type = person.getType();

从类名获取:Type type = typeof(Person);

从全类名(命名空间+类名)获取:Type type = Type.GetType("命名空间.类名");

使用情况:如果有一个对象,就用getType()获取,如果没有对象就用typeof;如果要运行通过配置文件拿到的字符串来获得就用Type.GetType("***");

序列化

BinaryFormatter类有两个方法:

void Serialize(Stream stream, object pbj)

对象obj序列化到Stream中

object Deserialize(Stream stream)

将对象从stream中反序列化,返回值为反序列化得到的对象

对象序列化的一些注意事项

要序列化的类型必须标记为:[Serializable]

该类型的父类也必须标记为: [Serializable]

该类型中的所有成员的类型也必须标记为: [Serializable]

序列化只会对类中的字段序列化,(只能序列化一些状态信息)

类结构修改后之前序列化的内容尽量不要用了,否则可能会出错

原文地址:https://www.cnblogs.com/HuShaoyi/p/8436818.html

时间: 2024-08-01 14:01:29

复习.Net高级的相关文章

个人对js闭包的理解

闭包算是前端面试的基础题,但我看了很多关于闭包的文章博客,但感觉很多对于闭包的理想还是有分歧的,现在网上对闭包的理解一般是两种: 有些文章认为闭包必须要返回嵌套函数中里面用到外面函数局部变量的方法才叫闭包,有两个条件:1).函数嵌套,内部函数要用到外部函数的局部变量 2).内部函数必须返回 有些文章认为只要函数嵌套内部函数用到了外部局部变量就是闭包,不要返回内部函数 我们先看看闭包的定义到底是什么,然后在来分析我在学习js的时候不同阶段对闭包的误解.在<javascript高级程序设计中>对闭

Java高级复习㈠ 多线程

1.线程 也称为轻量级进程,每个线程有自己的堆栈.程序计数器.局部变量.与进程相比,进程中的线程之间隔离程度要小 2.Java实现 ①implements Runnable ②extends Thread 一般推荐① 3.sleep().yield() sleep()方法对当前线程操作,指定以毫秒为单位的线程最小休眠时间,除非线程因中断提早恢复执行,否则不会在这段时间前恢复执行.线程可调用另一线程的interrupt()方法,向暂停的线程发出InterruptedException,变相唤醒暂停

《高级Web后台开发》复习

一.单选题 1.如何声明一个PHP的用户自定义类?( B  ) A.<?php                                                                             B.<?php class Class_name() { }                     class Class_name { } ?>                                     ?> C.<?php   

php高级进阶系列文章--第二篇(PHP基础知识复习)

php基础知识复习 本文中对于简单的知识点只会提及一下(例如什么控制结构什么的),对于较有难度的详细复习下(例如面向对象的反射等等) 再次申明,本系列文章不是从最基础的开始复习,对于零基础的可能不适用,本文的初衷是我要准备攻读源码,在攻读前将之前的知识牢固下,太过简单的就写在文中了 1,echo print echo 可以输出一个或者多个字符串 print 只可以输出一个字符串,返回值总为1 2,PHP7中的组合比较符 echo 1 <==> 1 // 0 echo 1 <==>

php高级进阶系列文章--第五篇(redis基础知识复习)

在实际工作中不仅需要使用到非常重要的关系型数据库mysql,同时也需要使用到redis,memcached,mongodb等进行数据存储,完成特定的产品需求,本节先复习redis的基础知识,高深部分后续会继续探讨 1,redis与其他的key-value形式缓存数据库的特点: 支持数据持久化,将内存中的数据保存到磁盘中,重启的时候再次加载进行使用 redis不仅有key-value格式的数据,同时也有list,set,zset,hash格式的数据结构存储数据 redis支持数据的备份,即Mast

python 面向对象基础和高级复习

面向对象基础 面向对象编程 面向过程编程:类似于工厂的流水线 优点:逻辑清晰 缺点:扩展性差 面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互 优点:扩展性强 缺点:逻辑非常复杂 类与对象 对象:属性和方法的集合体 类:一系列相同属性和方法的集合体 现实世界中先有对象后有类,python中先有类,再实例化出对象 对象的属性的查找顺序 先对象本身-->类-->父类-->父类的父类-->object-->自己定制的元类-->type 给对象

C#高级编程技术复习一

从基本的Socket编程进入 (注意:这是转的一篇2011年的文章,有些知识可能该更新了!) 这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblogs.com/chenxizhang/SocketWorkshop.rar 第一步:创建解决方案 第二步:创建服务端程序 这里可以选择“Console Application”这个类型,比较方便调试 然后编写

Java复习之面向对象高级

一.继承的基本实现 1. 继承的概念及实现(extends) 2. 继承实现的各种限制 1)只能单继承,不能多重继承,但允许多层继承 二.继承的进一步研究 1. 子类对象的实例化过程(先祖先,后自己) 子类构造方法中隐含了super()调用父类的构造函数 2. 方法覆写的概念及实现 1)被子类覆写的方法不能拥有比父类方法更加严格的访问权限 2)在父类中为private的方法,子类中设置为default的方法并没有覆写父类的方法,而是重新定义了一个新的方法 3)方法重载(overloading)V

关于爬虫的日常复习(13)—— 爬虫requests的初级高级的基本用法

原文地址:https://www.cnblogs.com/xingnie/p/9408721.html