/// <summary>
/// 如果多个button使用同一个click事件
/// 可以通过sender来确定当前事件对应的是哪个button的触发的
/// </summary>
/// <param name="sender">触发这个事件的控件</param>
/// <param name="e">事件的相关信息</param>
private void button1_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
}
导入命名空间的快捷键
Ctrl+. 或者Shift+Alt+F10
成员变量和局部变量
/// <summary>
/// 在类中直接声明的变量叫做类的成员变量
/// 类的成员变量在声明之后会有默认值,所以在声明之后可以不赋值
/// </summary>
static int num;
static int age = 100;
static void Main(string[] args)
{
Console.WriteLine(num);
num++;
Console.WriteLine(num);
//在方法中声明的变量叫做局部变量
//局部变量必须在声明之后赋值,否则会报错,提示使用了未赋值的局部变量
int m = 0;
//int m;
m++;
Console.WriteLine(m);
//类的成员变量和方法的局部变量是可以同名的
//而且谁离得近优先使用谁,所以这里输出为1000
//这主要是应为类的成员变量和局部变量存储的位置不同
int age = 1000;
Console.WriteLine(age);
Console.ReadKey();
}
封装:主要就是为了方便
比如电视遥控器,随着电视升级,遥控器也跟着升级
遥控的距离增加,更精准,更灵活,但是他们的主要按键还是一样的
内部的操作原理被封装了起来,我们不用知道他的运作过程也可以使用
继承:主要就是为了代码的重复使用
比如男人和女人继承自人,我们可以说男人是人,这是正确的
如果说学生继承自三好学生,我们不能说所有的学生都是三好学生,所以这个继承是错误的
多态:
抽象类:
抽象类类中可以有实例成员,也可以有抽象成员
抽象成员只能包含在抽象类中
抽象成员不能有任何实现(不能有方法体,空的方法体也不行)
抽象类不能被实例化,抽象类的目的就是用来被继承,继承的主要目的就是为了实现多态
抽象成员被继承之后必须要被override重写,除非子类也是一个抽象类
ps:是使用虚方法还是抽象类,主要看这个类需不需要有默认实现,还有就是这个类要不要被实例化类决定
如果需要有默认实现,或者需要被实例化则使用虚方法,否则使用抽象类
/// <summary>
/// 抽象类
/// </summary>
public abstract class Person
{
/// <summary>
/// 抽象类里面可以有实例成员也可以有抽象成员
/// </summary>
public string Name
{
get;
set;
}
/// <summary>
/// 抽象成员只能存在抽象类中
/// 抽象成员不能有任何实现,连空实现也不行
/// 抽象类不能被实例化,抽象类存在的意义就是被继承,而继承是为了实现多态
/// 子类在继承抽象类的时候,所有的抽象成员必须被重写
/// </summary>
public abstract void SayHi();
public abstract void Eat();
}
public class Student : Person
{
public override void SayHi()
{
Console.WriteLine("大家好,我是一名学生呵呵呵呵。。。。");
}
public override void Eat()
{
Console.WriteLine("你个吃货 思密达");
}
}
public class Test
{
public void te()
{
//把子类存储到父类中,然后去调用子类重写的方法,才是抽象类的意义所在
//如果直接实例化子类Student s = new Student();,然后在对子类进行操作,就失去了抽象类的意义
Person p = new Student();
p.SayHi();
p.Eat();
}
}
实例类中的静态成员
public class Class2
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// 如果在一个实例类里面有一个静态类,并且为这个静态类赋值一个初始值
/// 则在编译之后这个类里面会有两个构造函数
/// 一个静态构造函数,用来初始化Age=19
/// 如果没有赋值,则不会有这个静态构造函数,而只有一个实例静态函数
/// </summary>
public static int Age = 19;
}
静态类
public static class Class3
{
/// <summary>
/// 静态类中也可以写静态构造函数
/// 但是静态构造函数不能有修饰符
/// 而且静态构造函数默认的访问修饰符为Private,以此来保证他不能被实例化
/// </summary>
static Class3()
{
}
public static string Name;
public static void SayHi()
{
}
/// <summary>
/// 静态类中不能添加实例对象
/// 静态类中只能有静态成员
/// </summary>
//public string Name;
}