C#虚方法和抽象方法的区别
2024-08-30 16:34:29
一,如下例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace DemoTest
{
class Program
{
static void Main(string[] args)
{
B a = new B();
}
}
public class A
{
public A()
{
Say();
}
protected virtual void Say() {
Console.WriteLine("A");
}
} public class B : A
{
protected override void Say()
{
Console.Write("B");
}
}
}
结果:
输出的则是B
二,通过调试得出结论:
当B继承A时,并重写A中的方法,程序运行的时只会进入到B中重写的方法Say(),而不会进入A中的Say()
三,抽象方法和虚方法的区别
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace abstractOrvirtual
{
class Program
{
static void Main(string[] args)
{
AbstractDemo ab = new Test();
ab.AbstractEvent();
ab.VirtualEvent();
ab.VirtualEvent2();
}
}
public abstract class AbstractDemo
{
public abstract void AbstractEvent();
//public abstract void AbstractEvent2() //无法声明主体,因为它标记为 abstract
//{
// Console.WriteLine("抽象方法");
//}
public virtual void VirtualEvent()
{
Console.WriteLine("虚方法");
}
public virtual void VirtualEvent2()
{
Console.WriteLine("虚方法");
}
// public virtual void VirtualEvent2();必须声明主体,因为它未标记为 abstract、extern 或 partial }
public class Test : AbstractDemo
{
public override void AbstractEvent() //抽象方法可以被重写
{
Console.WriteLine("抽象方法");
}
public virtual void VirtualEvent2()//虚方法可以被重写
{
Console.WriteLine("虚方法2");
}
}
}
最新文章
- spring 参数绑定
- 安装phpredisadmin linux nginx服务器下
- 安装pillow错误的解决方案
- Java Spring AOP用法
- .NET 的 WebSocket 开发包比较
- Java实验三报告
- 滤镜简单demo(转,供参考)
- PHP中Get()和Post()用法详解
- Android 各种MIME类型和文件类型的匹配表
- jquery dialog的关闭事件不触发,触发不了
- 转载 C语言中volatile关键字的作用
- mvp架构解析
- vfd电子时钟制作
- 学习笔记 C++ 链表
- 我眼中的 Nginx(一):Nginx 和位运算
- 【Android Studio安装部署系列】五、新建你的第一个项目:HelloWorld
- This is very likely to create a memory leak 异常
- javax.websocket.DeploymentException: Multiple Endpoints may not be deployed to the same path [/websocket/{sid}] : existing endpoint was class com.sanyi.qibaobusiness.framework.webSocket.WebSocketServe
- sql 语句查所有父级
- python练习题-day5