抽象类
抽象方法
//比如想要定义一个香烟类,可点烟有宇宙牌香烟 红旗渠牌香烟 中华牌香烟 改怎去定义呢?
// 抽象类修饰符 abstract
//abstract 放在类的前面,称为抽象类
abstract class Smoke
{
//abstract表示抽象的方法,放在方法前面表示方法是抽象方法
//抽象方法所在的类必须是抽象类
public abstract void Smoke();
//抽象类独立于抽象方法,也就是说没有抽象方法,类也可以声明为抽象类,抽象类不能被直接实例化,其他跟普通类没有区别。
}
抽象类说明
//抽象类中如果有抽象方法,那么被继承的具体类一定要实现抽象类中得所有抽象方法。
abstract class A
{
public abstract void AFunction ();
}
abstract class B : A
{
public abstract void BFunction ();
}
class C : B
{
public override void AFunction()
{
Console.WriteLine ("AFucntion.");
}
public override void BFunction()
{
Console.WriteLine ("BFunction.");
}
}
总结
1.抽象方法只作声明,而不包含实现,抽象方法旨在继承后实现,所以不能用private修饰。
2.抽象类不能被直接实例化。
3. 抽象类可以没有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类。
4.如果抽象类的派生类不是抽象类,那么必须重写抽象类的所有抽象方法。
扩充
1.抽象方法一定不能有实现,虚方法一定要有实现;
2.抽象方法被具体类继承后,一定要被重写,虚方法可以不重写。
3.抽象方法一种特殊的虚方法,一旦类中有抽象方法,
则类必须声明为抽象类,抽象类中可以有虚方法。
静态成员和静态类
用static修饰的成员称为静态成员
class Beauty
{
//静态字段
public static string feature = "美女";
//静态方法
public static void SpendMoney()
{
Console.WriteLine("买:衣服、包包、化妆品、鞋子。。。。");
}
}
景来成员由类名来调用 类名点出来
public static void Main(string[] args)
{
Beauty.SpendMoney();
string name = Beauty.feature;
}
区分静态成员
//=================由类来调用===========================
//静态字段
public static string feature = "美女";
//静态方法
public static void SpendMoney()
{
Console.WriteLine("买:衣服、包包、化妆品、鞋子。。。。");
}
//==============由对象类调用=========================
//普通的方法和字段
public string name;
public void Job()
{
Console.WriteLine("Unity主程");
}
静态类
//用static修饰的类称为静态类。
//静态类不能实例化,所以内部只允许有静态成员或const修饰的常量
static class MyMath
{
//int length; // 不能包含非静态成员
static int length;
const int id = 10;
//void fun(){} // 不能包含非静态成员
static int Abs()
{
return a > 0 ? a : -a;
}
}
静态类特点
1.仅包含静态成员和const修饰的常量。
2.不能被实例化。
3.是密封的, 不能作为父类。
4.有静态构造方法(函数),但静态构造方法必须是无参数的。
静态类用法
一些公用的变量或者方法可以放在静态类里面,以供其它类使用,例如一些排序算法等,可以把静态类看作一个工具类,任何地方只要需要都可以调用该类里面的成员,以提高开发效率。
单例设计模式
什么是单例设计模式?
简单来说单例设计模式就是确保一个类只有一个实例。
为什么要有单例模式?
单例模式是资源管理的必备模式,保证一个类只有一个实例并且这个实例易于被访问。
如何实现单例模式
1、构造方法设为private。
2、内建静态实例。
3、静态构造方法给实例做初始化。
class Person
{
List<Person> xuesheng;
string name;
int age;
private static Person ins;
public static Person Ins
{
get
{
if (ins == null)
ins = new Person();
return ins;
}
}
public void Changge(Person person)
{
}
public bool ChaXun_Name(string name,out int index)
{
index = -1;
for (int i = 0; i < xuesheng.Count; i++)
{
if (xuesheng[i].name==name)
{
index = i;
return true;
}
}
return false;
}
}
总结
-
静态类是一种工具类,不能实例化,不能继承
-
掌握单例设计模式思想和实现
-
抽象类和抽象方法