首页 > 代码库 > C#笔记

C#笔记

面向对象三特性:封装,继承,多态

 

var没有确定类型,类似于javascriptvar

is相当于JAVAinstanceof

asEmployee e = o as Employee;

o转换成Employee,转换不了返回空

 

sizeof获取值类型的字节大小sizeof(int)

typeof获取Type对象typeof(int)

 

 

 

命名空间别名

using m1 = myspace.dao

using m2 = myspace2.dao

m1.User

m2.User

 

常量和只读

public const int a;//常量,隐式静态,只能是内建值类型或枚举类型

public readonly int a;//只读,默认不是静态的,可以是任何类型

 

 

封装,相当于JAVAgetter,setter

C#中属性就是指getset

private string name;

public string Name{

get{ return name; }

set{ name = value; }

}

 

 

构造函数

public Person()

:this("jimmy")//调用别的构造函数

{

console.write("这句不调用");

}

public Person(string name){

console.write("此句被调用");

}

析构函数(与构造函数相反,对象销毁时调用)不能有参数,不能有修饰符,只能有一个,不能被调用

~Person(){

//清理非托管资源

}

 

 

 

继承

public class Student : Person{}

public sealed class Student : Person{}//sealed不能再往下继承,相当于javafinal,也可用于方法、成员

base相当于JAVAsuper

 

virtual  JAVA不同,基类必须有virtual子类才能override

class A{

    public virtual void F(){

Console.writeline("virtual");

    }

}

class B:A{

    public override void F(){

    Console.writeline("override");

    }

}

class C:A{

    public new void F(){

Console.writeline("new");

    }

}

override:只要是B实例都会打印override

new:根据引用类型调用对应的方法,A引用打印virtualC引用打印new

 

抽象

abstract  抽象方法隐式virtual,有抽象方法类必须是抽象的

abstract class A{

public abstract boolean isTrue();//抽象方法没有方法体

public void normalMethod(){//抽象类中可以有普通方法

if(isTrue()){//调用抽象方法,可用于模板模式

//xxx;

}

}

}

子类override关键字实现abstract方法

 

 

匿名类

var worker = new {name=jimmy,age=21};

 

 

分部类

同一个类写在不同文件中

public partial class A{//声明partial

 

}

partial class A{//A类的一部分

 

}

 

扩展方法

public static class PersonExtension{

public static void exist(this Person person,String name){

if(person.Name == name)

Console.WriteLine(msg);

}

}

Main(string args[]){

Person person = new Person();

person.Name = jimmy;

person.exist(jimmy);

}

 

接口

public interface IUser{

public string name{get;set;}//get,set只是声明,没有实现

public void insert(User user);

}

public class Student:IUser{

 

public void insert(User user){//可以显式指定IUser.insert(User user)

实现

}

}

抽象类继承接口,实现不了把继承自接口里的方法声明称abstract,子类再实现。可以实现直接实现

 

操作符重载(某些不能重载)

public static Person operator+(Person p1,Person p2){

xxxxx;

return person;

}

 

VS2013注册码:BWG7X-J98B3-W34RT-33B3R-JVYW9