c#中的类分为普通类(实例类),静态类,抽象类,密封类
抽象类:高度概括,优先规划,抽离共性.并不是为了实例化个体.主要是用来等着其他类来继承.没有类来继承抽象类无意义.抽象类是不能实例化的.所以无法通过实例的方法来方法抽象类的方法与属性,也无法通过抽象类来访问抽象类中的属性与方法.所以建议不要再抽象类中定义实例成员,如果一个抽象类中有实例成员,我们称这个类没有完全抽象.如果一个类只有抽象成员我们称它为完全抽象.
抽象类的定义
public abstract class{
public abstract int num{get; set;}//抽象属性
public abstract void numchange();//抽象方法
}
抽象方法的特征:1.定义时使用abstract关键字 2.不能实现,既没有方法体.3.抽象方法必须在抽象类中定义.
抽象类的具体应用:一个数据库中的表,一般都有增删查改操作,我们可以把这些操作封装到抽象类中.
密封类;
密封类定义使用sealed关键字.密封类的存在是为了让一个类无法继承,如果所有的类都能继承,很容易导致继承的滥用,进而使得类的层次结构变得十分复杂,这样使得开发人员的理解与使用变得十分困难,为了避免滥用继承,c#提出了密封类的概念.
密封类的特征:不能被继承,密封类不能当父类.2.密封类可以继承其他类(但静态类,密封类除外);3.在密封类中不能包含虚成员,因为虚成员只能在派生类中被重写.,密封方法在密封类中.密封方法不能在其他类中再次被重写.密封类没有子类不能被继承.
密封类中可以有受保护成员,不建议使用,受保护成员是可以在子类中使用的,而密封类中没有子类.
密封类定义密封方法有个前提:1.必须继承其他的类,且其他类必须有虚方法或抽象方法或已经重写过得方法 2.密封类中不能直接定义密封方法,而是把一个需要重写的方法定义成密封的.
普通类:
namespace ConsoleApp4
{
/* 继承:
* 静态类无法被继承
* 抽象类可以被继承
* 密封类无法被继承
*/
// public class Class1:Static1{ }
// public class Class2:Abstract1{}
// public class Class3:Sealed1 { }
/*类中无法存在抽象成员与密封成员*/
public class Class4
{
public int Comon { get; set; }
public static string Stc { get; set; }
// public abstract int art { get; set; };
// public sealed int sld { get; set; }
}
}
静态类:
namespace ConsoleApp4
{
//静态类不能继承
// public static class Static1 :Class4{}
// public static class Static2:Static3{ }
//public static class Static3:Abstract1 { }
// public static class Static4:Sealed1 { }
//静态类中只能存在静态成员
public static class Static5
{
// public int Cls { get; set; }
public static int Stc { get; set; }
// public abstract int Art { get; set; }
// public sealed int Sld { get; set; }
}
}
抽象类:
namespace ConsoleApp4
{
/*抽象类可以继承普通类与抽象类*/
public abstract class Abstract1 : Class4 { }
// public abstract class Abstract2:Static5{}
public abstract class Abstract3 : Abstract4 { }
public abstract class Abstract4 { }
//public abstract class Abstract5 :Sealed1{ }
//抽象类中不能定义密封成员
public abstract class Abstract6
{
public int Cls { get; set; }
public static int Stc { get; set; }
public abstract int Art { get; set; }
// public sealed int Sld { get; set; }
}
}
密封类:
namespace ConsoleApp4
{
//密封类可以继承普通类与抽象类
public sealed class Sealed1 : Class4 { }
// public sealed class Sealed2:Static5{}
public sealed class Sealed3 : Abstract4 { }
// public sealed class Sealed4 : Sealed5{ }
//密封类中不能定义抽象成员与密封成员
public sealed class Sealed5
{
public int num;
public int Cls { get; set; }
public static int Stc { get; set; }
//public abstract int Art { get;set; }
// public sealed int Sld { get; set; }
}
}