
C#中的抽象类问题
最近开始学习C#,在看书的过程中遇到一个问题:书上是这样写的:抽象类可以有抽象成员,这些成员在基类中没有执行代码,这些代码必须在派生类中提供。抽象基类可以提供成员的实现代...
最近开始学习C#,在看书的过程中遇到一个问题:
书上是这样写的:
抽象类可以有抽象成员,这些成员在基类中没有执行代码,这些代码必须在派生类中提供。
抽象基类可以提供成员的实现代码。
这两句话应该如何理解呢?方便的话请附上例子,谢谢 展开
书上是这样写的:
抽象类可以有抽象成员,这些成员在基类中没有执行代码,这些代码必须在派生类中提供。
抽象基类可以提供成员的实现代码。
这两句话应该如何理解呢?方便的话请附上例子,谢谢 展开
3个回答
展开全部
例如
public abstract class Person
{
public abstract void Eat(); //第一句话:抽象类可以有抽象成员(需加abstract关键字),这里只需要声明即可,在派生类里去实现。
public void Sleep() //第二句:抽象类可以有成员的实现代码。这个方法已经实现了 (不需加abstract关键字)。
{
Console.WriteLine("sleep");
}
}
张三类 派生与person
class 张三 :Person
{
public override void Eat() // 实现 基类(Person) 的抽象成员。
{
Console.WriteLine("eat");
}
}
也就是说抽象类里可以有Eat那样的抽象方法(成员),需派生类去实现。也可以有像Sleep那样的已经实现了的方法(成员)。
接口与抽象类有类似的地方,建议也一起看看。接口的话 里面只能是定义的方法,不能实现。由派生类去实现。
public abstract class Person
{
public abstract void Eat(); //第一句话:抽象类可以有抽象成员(需加abstract关键字),这里只需要声明即可,在派生类里去实现。
public void Sleep() //第二句:抽象类可以有成员的实现代码。这个方法已经实现了 (不需加abstract关键字)。
{
Console.WriteLine("sleep");
}
}
张三类 派生与person
class 张三 :Person
{
public override void Eat() // 实现 基类(Person) 的抽象成员。
{
Console.WriteLine("eat");
}
}
也就是说抽象类里可以有Eat那样的抽象方法(成员),需派生类去实现。也可以有像Sleep那样的已经实现了的方法(成员)。
接口与抽象类有类似的地方,建议也一起看看。接口的话 里面只能是定义的方法,不能实现。由派生类去实现。
展开全部
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类。抽象类与非抽象类在以下方面是不同的:
抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
允许(但不要求)抽象类包含抽象成员。
抽象类不能被密封。
当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员
抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
允许(但不要求)抽象类包含抽象成员。
抽象类不能被密封。
当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
抽象类一般作为基类
比如
abstract class Tool
{
public abstract void OnMouseDown(DrawingCanvas drawingCanvas, MouseButtonEventArgs e);
}
Tool是抽象类,下面有个抽象方法,定义了参数,但是没有写实体,就是方法的内容
这个方法可以被这个抽象类的派生类调用,重写
比如
class ToolObject : Tool
{
public override void OnMouseDown(DrawingCanvas drawingCanvas, MouseButtonEventArgs e)
{
//重写的内容
}
}
因为基类中的这个OnMouseDown方法,要在多给类中用到,所以用了抽象类,避免代码杂乱,冗余
比如
abstract class Tool
{
public abstract void OnMouseDown(DrawingCanvas drawingCanvas, MouseButtonEventArgs e);
}
Tool是抽象类,下面有个抽象方法,定义了参数,但是没有写实体,就是方法的内容
这个方法可以被这个抽象类的派生类调用,重写
比如
class ToolObject : Tool
{
public override void OnMouseDown(DrawingCanvas drawingCanvas, MouseButtonEventArgs e)
{
//重写的内容
}
}
因为基类中的这个OnMouseDown方法,要在多给类中用到,所以用了抽象类,避免代码杂乱,冗余
追问
抽象类还可以用来干啥的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询