您的位置:首页 > 其它

.NET 基础知识

2016-01-28 15:28 363 查看
.net程序基本编写、执行流程(c#)
1>编写c#代码,保存为.cs文件。
2>通过csc.exe程序来将.cs文件编译为.net程序集(.exe或.dll)。此时的exe或dll并不是机器码(cpu不可理解)。【>csc /out:c:\a.exe c:\program.cs】   C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
3>程序运行时通过JIT编译(Just In Time)即时编译,将程序集编译为cpu能理解的机器码,这时cpu才能执行。(这个编译过程会与当前机器有关(根据当前机器的内存、cpu等))。
垃圾回收

垃圾回收器,只回收托管堆中的内存资源,不回收其他资源(数据库连接、文件句柄、网络端口等)。
•没有变量引用的对象。没有变量引用的对象,表示可以被回收了(null),断了线的风筝,再也回不来了。
•回收时间不确定,当程序需要新内存的时候开始执行回收。
•GC.Collect();//手动调用垃圾回收器。不建议使用,垃圾回收时会暂停一下(非常短暂)让程序自动去GC。

垃圾回收器中“代”的概念:
•共3代:第0代、第1代、第2代。
•各代的回收频率:第0代最高,其次第1代,再次第2代。也就是说越老的对象生存几率越大。
.net中垃圾回收机制:mark-and-compact(标记和压缩),一开始假设所有对象都是垃圾。
除了内存资源外的其他资源怎么办?~或者Dispose()
最基本的5个设计原则

单一职责原则(SRP:Single Responsibility Principle):一个类,应该仅有一个引起它变化的原因,不要将变化原因不同的职责封装在一起,而应该隔离。

开放封闭原则(OCP,Open Closed Principle):软件实体应当对修改关闭,对扩展开放。

依赖倒置原则(DIP,Dependency Inversion Principle):依赖抽象,而不要依赖于具体,因为抽象相对稳定。

接口隔离原则(ISP,Interface Segregation Principle): 尽量应用专门的接口,而不是单一的总接口,接口应该面向用户,将依赖建立在最小的接口上。

Liskov替换原则(LSP,Liskov Substitution Pinciple): 子类必须能够替换其基类。

合成/聚合复用原则(CARP,Composite/Aggregate Reuse Principle)在新对象中聚合已有对象,使之成为新对象的成员,从而通过操作这些对象达到复用的目的。合成方式较继承方式耦合更松散,所以应该少继承。

•接口→抽象类→父类→具体类(在定义方法参数、返回值、声明变量的时候能用抽象就不要用具体。)

params 可变参数
·一个函数中只能一个参数带params关键字;
·带params关键字的参数必须是最后一个参数;
·带params关键字的参数类型必须是一维数组(传递一个或者多个参数);



类中的成员,如果不加访问修饰符,则默认为private

类如果不加访问修饰符,则默认为internal

继承:

---好处

1.代码重用

2.多态(里氏替换原则LSP)

---特征

1.当写好一个类以后,默认会存在一个没有参数的构造函数(即便我们不写构造函数,也会存在这么一个无参的构造函数)

2.当手动添加一个构造函数以后,会将默认的无参数的构造函数覆盖掉。

3.类的构造函数是不能被继承的。只能在子类中去调用父类的构造函数。

编译是为父类对象,但运行却是一个子类对象。具体特征如下:

  1.被声明为父类对象

  2.拥有父类属性

  3.占用子类的内存空间

  4.子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则,自动调用继承父类的方法.

抽象类和接口的区别

接口定义类的公共行为,抽象类定义类的公共实现

一个类只能继承自一个类(抽象类),但是可以同时实现多个接口

接口中不能有实现,抽象类中可以有未实现成员也可以有实现的成员

接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写

好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

什么时候使用抽象类,什么时候使用接口

抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。

1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。

2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口

虚方法和抽象方法的区别

虚方法必须有实现(哪怕是空实现),抽象方法必须没有实现

抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中

抽象方法必须在子类中重写,虚方法可以被重写

实现多态的主要手段:

1.虚方法virtual

2.抽象方法abstract

3.接口。

关于虚方法需要注意的几点:

1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual

2.虚方法在父类中必须有实现,哪怕是空实现。

3.虚方法子类可以重写(override),也可以不重写。

public abstract class MyBase
{

protected abstract void Search();

protected virtual void Save()
{
dbContent.SaveChange();
}
}


static  

普通类中的静态成员static
•只能通过类名访问
•静态方法中只能访问静态成员,或通过对象访问实例成员。(就像main方法)
•多个对象共享同一个静态成员。

Type type = typeof(Person);
MethodInfo method = type.GetMethod("SayHi", BindingFlags.NonPublic | BindingFlags.Instance);

object obj = Activator.CreateInstance(type);
method.Invoke(obj, null);

public class Person
{
private void SayHi()
{
Console.WriteLine("hi!");
}
}


通过反射访问私有成员
隐式类型(类型推断)

var关键字(在编译时已经能确定变量的类型了。并不是弱类型。根据后面的值自动推断类型,编译时把推断的类型替换掉var,只是方便程序员使用而已)

•var k = "C Sharp";//string
•var x;//错误
•var y = null;//错误
•var z = { 1, 2, 3 };//错误 var z=new[] {1,2,3};//正确。
注意:不能作为类成员的类型、不能用作方法的参数,返回值。(只能用作局部变量的类型推断)

可以使用new关键字调用匿名初始化器创建一个匿名类型的对象。匿名类型直接继承自System. Object。

var p2 = new { Id = 2, Name = "XieQing", Age = 25 };
•var intArray = new[] { 2, 3, 5, 6 };

扩展方法-Linq中用的很多。
声明扩展方法的步骤:类必须是static,方法是static,第一个参数是被扩展的对象,前面标注this(this 数据类型 参数名)。

Xml

1.严格区分大小写
2.有且只能有一个根节点
3.有开始标签必须有结束标签
4.属性必须使用双引号
5.没有预定义标签与html不一样
6.文档声明:<?xml version="1.0" encoding="utf-8"?>
7.注释:<!-- -->
8.CDATA区:即原意文本-<![CDATA[…]]>
9.注意编码问题,文本文件实际编码要与文档声明中的编码一致。

<![CDATA[ 文本 ]]>:<![CDATA[ 这里的文字将被解析为纯文本,即便有 < >的标签也不会被解析为xml标签。 ]]>

读写XML有很多技术:
1.Dom[XmlDocument、XDocument](文档对象模型,将整个xml加载到内存中,然后操作)
•XmlDocument→.net2.0
•XDocument→net3.x(Linq to Xml)

2.Sax(Simple API for XML,事件驱动,.net中使用XmlReader(XmlTextReader)、XmlWriter(XmlTextWriter)来替代)等,还有高级的读写技术
3.XmlSerializer(xml序列化,需要先定义类)
4.Linq To XML(System.Xml.Linq),用到的就是Xdocument,Xelement等等

XmlSerializer要求对每种不同的文件都定义一套类,很麻烦,而Linq To XML则不需要单独创建类,当然更底层一些,代码比XmlSerializer多,灵活性更高。System.Xml下的类是2.0及之前操作xml推荐的,现在很多人也仍然在用这个namespace下的类,这个namespace下的类和Linq To XML非常相似,因此不用单独学。

Schema、DTD:在App.Config中“转到定义”会看到文件的定义约束文件,DTD约束能有哪些属性、能有哪些元素

RSS

RSS是站点用来和其他站点之间共享内容的简易方式( 也叫聚合内容)。RSS使用XML作为彼此共享内容的标准方式。它代表了Really Simple Syndication(或RDF Site Summary,RDF站点摘要)。 它能让别人很容易的发现你已经更新了你的站点, 并让人们很容易的追踪他们阅读的 所有weblogs。
http://tech.163.com/special/000915SN/simplerss.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: