静态方法
特点:1、生命周期一旦创建–应用结束才会结束 2、全局 3、效率高
用处:用户登录信息、系统配置信息、系统设置、SQLHelper
注意:静态的东西创建多了占用内存会很大,不是必要的情况不要创建静态的对象
调用:静态方法中调用非静态方法时,不可以直接调用,需要把所在类初始化以后再调用
Form1 form1 = new Form1();
form1.Test();
构造方法
用处:初始化对象或者初始化一些数据
特点:默认是有一个无参的方法
析构方法
作用:释放对象
谁在使用:GC垃圾回收器在使用
垃圾回收机制:
回收非托管资源——Windows窗口句柄、数据库连接、GDI对象、独占文件锁等等对象
虚方法(小蜜蜂)
特点:好维护
作用:参数一致、返回值一致, 允许子类派生类,进行重写,也实现不一样的功能
重写方法——override
namespace CSharpAdvanced
{
class Test
{
//加法
public virtual int Calculate(int a,int b)
{
return (a + b);
}
}
class VirtualTest:Test //重写虚函数需要继承其父类
{
//乘法
public override int Calculate(int a, int b)
{
//return base.Calculate(a, b); //直接调用父类的方法
return (a * b);
}
}
}
抽象方法——abstract(大懒虫)
定义:一定要写在抽象类中且不可new,不带函数体,只是写了一个规范,由子类实现
使用场合:强制性一定要实现
与接口区别使用场合:
区别:1、抽象类——单继承(只能继承一个父类,不可继承多个父类);接口——多继承
2、抽象类里可以写普通方法,虚方法;接口只能写规范,不能写实现
使用场合:抽象类一般用于常用不会经常改动,抽象范围大一些的事件(人->男人->女人)
接口适用于经常修改,只是一个规范的地方(比如人要吃饭走路)
namespace CSharpAdvanced
{
public interface Calculate1
{
int Add(int a, int b);
}
class InterfaceClass : Calculate1,Calculate2
{
public int Add(int a, int b)
{
return a + b;
}
int Calculate2.Sub(int a, int b)
{
return a - b;
}
}
}
namespace CSharpAdvanced
{
public interface Calculate2
{
int Sub(int a, int b);
}
}
扩展方法ExtendMelthod
定义:在非泛型静态类中定义静态方法—>>扩展方法
使用场合:1——调用密封类中的对象、属性或方法。2——扩展接口 3——在Linq链式编程…
1、调用密封类中的对象、属性或方法
namespace CSharpAdvanced
{
///
/// 假如这个类别人那边拿过来的,不是自己写的
///
public sealed class Person //sealed关键字是将此类密封起来,不可随便继承
{
public string Name { get; set; }
public int Age { get; set; }
public string Phone { get; set; }
///
/// 返回电话
///
///
public string GetPhone()
{
return Phone;
}
}
}
继承:
namespace CSharpAdvanced
{
///
/// 定义一个静态类,静态方法
///
public static class PersonExtend
{
public static string ShowPhone(this Person person)
{
return person.Phone;
}
}
}
使用:
//扩展方法
Person person = new Person()
{
Age = 20,
Name = "zhang",
Phone = "123456789"
};
string phone= PersonExtend.ShowPhone(person);
MessageBox.Show(phone.ToString());
2、扩展接口
namespace CSharpAdvanced
{
public interface ICalculate
{
int Add(int a, int b);
}
}
扩展类接口且实现
namespace CSharpAdvanced
{
public static class InterfaceExtend
{
public static int Sub(this ICalculate calculate, int a,int b)
{
return a - b;
}
public static int Maltiply(this ICalculate calculate, int a, int b)
{
return a * b;
}
public static int Division(this ICalculate calculate, int a, int b)
{
return a / b;
}
}
}
接下来其他类继承时,就不需要全部接口实现,只需要实现主接口中定义的接口即可,但在使用时是可以使用扩展接口中的方法的,这样就省去了很多不必要的接口实现
namespace CSharpAdvanced
{
class AAAAAA : ICalculate
{
public int Add(int a, int b)
{
//throw new NotImplementedException();
return a + b;
}
}
}