using System; //命名空间
using System.Collections.Generic; // using 命名空间.类名
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1 //项目名称
{
class Program //类
{
static void Main(string[] args) //程序入口:Main函数
{
Console.WriteLine("Hello World!");
Console.ReadKey(); //按下任意键继续
}
}
}
VS快捷键:
Ctrl+J--智能提示 Ctrl+K+D--快速对齐代码 Ctrl+K+C/U--注释/取消注释
Shift+Home、Shift+End(光标位置)--快速选中行
Alt+Shift+F10--导入命名空间 两次Tab键--自动补齐 F12--定位代码
启动项目>起始网页:F9--设置断点 F5--执行 F10--单步执行 F11--单语句执行
注释
/*
* 算法注释
*/
/// <summary>
/// 方法功能注释
/// </summary>
/// <param name=""></param>
private void fun(params)
{
//步骤注释
}
#region Name
//折叠代码
#endregion Name
[public] [static] class 类名 //静态类(如,Console)只能定义静态成员,也不能实例化
//静态类在整个项目里资源共享:登陆后的用户名密码保存在静态类
{
//Field字段 --存储数据
[private] 类型 _字段名 //默认private
//Property属性:值>属性set/get方法(不存值)>字段 --保护字段
public [static] 类型 属性名{
get { return _字段名; }//属性取值=>取字段值:判断字段
set { _字段名 = value; }//属性赋值=>字段赋值:判断value
}
//Method方法
public static void M1(){
//实例方法可以访问静态成员和实例成员
}
public static void M2(){
//静态方法只能访问静态成员
}
//构造函数:初始化对象,创建对象时执行
public 构造函数名(){ //默认无参构造函数(构造函数名=类名)
}
public 构造函数名(参数1,参数2,参数3){//有参构造函数(默认构造函数则消失)
this.属性 = 参数;
}
//this:当前对象-显示调用本类构造函数(:this)
public 构造函数名(参数1,参数2):this(参数1,参数2,0){//调用参数多的构造函数
this.属性 = 参数;
}
//析构函数:程序结束执行,帮助立即释放资源,否则GC(Garbage Collection)释放
~析构函数名()
{
//函数体
}
}
//new:申请空间>创建对象>调用构造方法
public class 父类 //所有类的基类Object
{
public 父类(参数)//有参构造方法
{
this.属性 = 参数
}
//public 父类(){} //无参构造方法
}
public class 子类 : 父类 //不继承父类构造函数,但创建子类对象会默认调用父类无参
构造函数,创建父类对象,让子类可以使用父类成员
{
//子类私有成员
public 子类构造方法(参数): base 父类构造方法(参数)//使用父类有参构造方法
public new void 相同父类方法名(){} //new:隐藏从父类继承的成员
}
//多态:让一个对象表现多种类型
//方法:1、虚方法 2、抽象类 3、接口 抽象类和接口不能实例化
//1.虚方法virtual:如果子类没有重写父类虚方法,则调用父类方法
public virtual 父类方法() {
}
public override 子类重写方法() {
}
//2.抽象类abstract:父类方法不知道如何实现,父类写成抽象类,方法写成抽象方法
public abstract class 抽象父类 {
public abstract void 抽象方法();//没有方法体
}
public override 子类重写抽象方法(){
}
父类 父类对象 = new 子类();//父类对象的方法被子类重写,所以调用的是子类方法
//3.接口:一个规范、能力
pubic interface 接口名 : 父接口1,父接口2 //只能继承接口
{
//接口中的成员不允许添加访问修饰符,默认是public
//方法、自动属性、索引器、事件(不具有方法体的函数)
/*
//普通属性:有方法体
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}*/
//自动属性:编译时默认生成一个私有字段
public int 属性
{
get;
set;
}
}
public class Person : 父类,接口名 //继承类必须写在接口之前
{
//重写接口的方法
}
//委托类型:将方法名作为一个参数
//声明委托指向一个函数:委托指向的函数必须跟委托具有相同的签名(参数和返回值)
public delegate void MyDlg(参数);
public static void Test(参数,MyDlg del)
{
del(参数);//调用
}
MyDel del = myInstaObj.MyM1; //赋值委托
MyDel del1 = delegate( int x) { return x; };//匿名方法
MyDel del2 = (int x) => {return x;};//Lambda表达式
MyDel del3 = x => {return x};//简写的Lambda表达式