谁帮我解释下这段c#代码啊

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{

public abstract class A
{
public A()
{
Console.WriteLine('A');
}

public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}

public class B : A
{
public B()
{
Console.WriteLine('B');
}

public new void Fun()
{
Console.WriteLine("B.Fun()");
}

public static void Main()
{
A a = new B();
a.Fun();
Console.ReadKey();
}
}

}

这个好难啊。。。

这个题是考最后会输出什么吧?这个题主要考抽象类,虚方法和多态。
输出结果如下:
A
B
A.Fun()

为什么?

首先,类A是个抽象类,内部有个构造器和虚方法,在构造器中输出A,在虚方法中输出A.Fun(),然后,类B继承自类A,那么类B具备类A的所有特点,在类B中用new来隐藏了父类A的虚方法,注意,不是重写,只是隐藏了,对父类的方法没有影响的,如果把new换成override就有影响了,如果把new去掉就形成了多态,(对同一命令作出不同的状态,或说对同一方法执行不同的命令,这里我听过一个比较好的例子,比如理发师,演员和医生,当对理发师说剪切那么他会开始剪头发,对演员说剪切,那么他会停止表演,对医生说剪切,他会。。)最后,在主函数中实例化了一个类B的实例,为什么是不是类A,明明写着A a...吗?这是一个重点,类A是abstract(抽象类),抽象类是不能被实例化的,所以只有把它实例化成类B,也就是它的子类,如果你直接写成A a=new A()就不能编译。在实例化的时候先执行父类A的构造器,所以这里输出A,然后执行自己B类的构造器,所以输出B,最后主函数中调用a.Fun()的时候调用的是A类的Fun,抽象类的方法只能在子类中调用,之前提到它被子类B隐藏了,而非重写,所以输出A.Fun().不知道能明白吗?如果不能联系我,相互学习。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-11
这个很像C#考试题,拿来运行一下就知道了
第2个回答  2010-10-11
定义了一个抽象类A 里面有一个 虚方法Fun()
定义了一个类B 继承A 复写了fun();
有个静态方法 main()
里面声明了一个 A类 然后用B 实例化了这个A类(因为B继承A的关系所以)
然后调用了 fun()方法
第3个回答  2010-10-11
建议楼主先看ppop3的理论,我只解释运行情况
A
B
A.Fun()

A a=new B();这句话实例化一个B对象,首先因为B是对A的泛华,构造对象的时候首先从基类开始,于是先输出A然后B,
A.Fun() 如果B类的Fun方法没有关键字new,那么这将是一个多态,也即A.Fun()方法将调用B类的同名方法,现在加上了new关键字,new关键字屏蔽基类同名方法,多态失效,A.Fun()时将直接调用A类方法。
ps建议楼主去看2个知识点第一“多态”第二“new关键字的用法”。
第4个回答  2010-10-11
a是基类 b是a的继承类

这段C#代码是什么意思?
string s = Name();\/\/将name进行属性封装,以便外部方法能够通过访问name的属性来访问name public string Name(){ \/\/将name进行属性封装后,外部方法只能够获取name的值,而不能赋值给name,也就是不能 \/\/改变name的值 return name;} “封装”是面向对象编程语言(如c#)大三大特点之一 对私成员进...

谁能说一下这一段C#代码的意思,写一下注释,谢谢
public class DBHelper \/\/定义类名(看得出实际上是一个数据库访问类){ public static float Price = 0.1f; \/\/定义价格,0.1 复浮点型 public static SqlConnection Connection = new SqlConnection("server=.;database=网吧管理系统;uid=sa;pwd=122"); \/\/创建sqlconnection连接对象,通过构造函...

刚学c# 各位前辈帮我解析下这段代码是什么意思public bool IsReusable...
public bool IsReusable先说第一行。IsReusable是一个变量名,类型是bool,就是只有true和false的类型。public代表这个变量(IsReusable)是公开的,其他函数都能使用它。get{ return true; }再说这一行。意思是这个变量(IsReusable)有一个get函数,get函数用于返回一个值(就是代码中的true)就是我下...

请高手帮我解释一下这些C#代码的意思(连接数据库的代码)
首先最下面的FrmMain_Load(...)是载入窗体时的初始化 先new一个publicclass()对象 接下来调用此对象的GetDataSet()方法 来看GetDataSet()方法 新建一个DataSet,用来存放从数据库获得的记录,Dataset可以在关闭数据库连接后使用;Sqldataadapter,从名字上看适配器的意识,类是我们用的笔记本的交流电适配器...

C#高手进来下 帮我解释下这段代码的意思 谢谢
其实 void textBox1_KeyPress(object sender, KeyPressEventArgs e){ if (!char.IsNumber(e.KeyChar)){ \/\/如果不是数字 e.Handled = true; \/\/取消 } } 这样写就得了 上面是哪个家伙写的啊~烂哩

下面这段C#源代码是什么意思
第一个应该是还原课程一览,第二个是还原班级一览,第三个是各班级的课程一览。处理方法都是完全一样的。我只解释一个。\/\/ 函数定义开始,参数是保存List<Course>对象的二进制文件,\/\/ 应该是之前什么程序的输出的List<Course>序列化后的文件。public static List<Course> GetCourseListFromDB(...

这段C#源代码是什么意思。。。
public class Course { public static int Seed = 0; \/\/声明一个公共整型静态变量Seed,值是0;public int ID; \/\/声明公共整型变量ID public string TeacherName;\/\/声明...字符串变量TeacherName;public int TeacherID; \/\/...整型TeacherID;public string Name; \/\/ ...都一样的...public in...

请高手帮忙详解一下 这段C#连接数据库代码
protected void btnAdd_OnClick(object sender, EventArgs e){ \/\/调用ConnectionSqlDB(); 类 ConnectionSqlDB();} \/\/定义ConnectionSqlDB(); 类 private void ConnectionSqlDB(){ \/\/创建数据库连接字符串变量并赋值(数据库地址,用户,密码,数据库名)String CONNECTIONSTRING = "server=localhost;uid=...

这段C#小代码 ,谁能帮我解释下Controls.Add这个意思?
p.Add(p.Count,lab);p.Count是指表里面存放的是表元素的个数 Label lab = new Label();说明lab是实例化的一个标签对象,lab.Font = new Font("宋体",30); \/\/设置标签上的字体 lab.AutoSize = true; \/\/自动大小 lab.Text = b.ToString(); \/\/标签内显示的内容为b this.Controls.Add(...

请教C#这几句代码什么意思 急
this.Close(); } else { MessageBox.Show("修改失败“,提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }

相似回答
大家正在搜