c#初学者向大家请教一个问题,非常非常简单的问题

问题描述

publicclassA{publicA(){Console.WriteLine("a");}}publicabstractclassB:A{publicvoidbb(){Console.WriteLine("b");}Akk=newA();}publicclassProgram:B{staticvoidMain(){Programkkk=newProgram();kkk.bb();}}上面代码结果为什么是aab呢?另外我记得老师好像说类成员可以有字段、方法、属性和事件,那么Akk=newA()属于上面什么成员呢?谢谢大家了。我是初学者。

解决方案

解决方案二:
这是我在csdn的第一个贴,请大家帮忙啊,谢谢大家了,在线等中。。。。。。
解决方案三:
加断点测试以下就可以看出来了!第一步执行Main里的实例化program类,第二步转向调用Akk=newA();因为是继承的B就会去实例化A类,第三步调用A的构造方法!就会打印出a,接着又去掉用B里的Akk=newA();又回去调用所以打印第二个a,最后调用program类的bb方法就打印出b了!
解决方案四:
谢谢楼上的~但有2个问题:1.为什么第2步执行的是Akk=newA();2.Akk=newA();这个赋值语句究竟可以看成是什么,看成构造函数吗?怎么我不明白的是怎么第2步会执行这个赋值语句呢?奇怪。另外这个语句怎么执行2次呢?
解决方案五:
实例化program->实例化B->实例化A(B继承A)->A的构造函数->打印“a”->实例化kk(即A)->A的构造函数->打印“a”kkk.bb();->执行bb()->打印"b"很简单的啊~
解决方案六:
因为类B实例化的时候对它的字段kk有个初始化的过程也可以算是默认构造函数的一部分吧它调用了A的构造函数
解决方案七:
1Akk=newA();2A的构造函数3Console.WriteLine("b");
解决方案八:
1.newProgram()的时候要去实例化Program,执行构造函数,但是它是继承自B的,因此编译器就去加载B类,首先执行的是字段的初始化,因此在Akk=newA();中,实例化了A,调用了A的构造函数,输出了"a"2.执行完Akk=newA()后,因为B类还没有加载完,接着找它的构造函数,发现它是继承自类A的,因此又加载类A,找到类A的构造函数,因此输出了第二个"a"3.类A也加载完成后,调用kkk.bb(),因继承自类B,因此相当于调用B.bb(),输出了"b"楼主说“Akk=newA();执行了两次”是错误的,只执行了一次。第一个"a"是它输出的。第二个"a"可以说是Programkkk=newProgram();生成的。
解决方案九:
楼上DeViLIvy谢谢你,但您的第一条写的“编译器就去加载B类,首先执行Akk=newA()”,我总是不明白为什么执行这个语句,因为赋值号右边有newa()语句的关系吗?按照我的理解编译器去加载B类时,看到继承自A类,首先执行的是A类的构造函数啊,例如:publicclassA{publicA(){Console.WriteLine("a");}}publicclassB:A{publicB(){Console.WriteLine("b");}}publicclassC{staticvoidMain(){Bkk=newB();}}结果为ab编译器加载B类时,看到继承自A类,先加载A类的构造函数。
解决方案十:
自从开始学C#,发现许多许多的问题,还请各位大侠帮忙,真心谢谢大家了。问的可能大家不屑一顾,但真心求求大家帮忙解答^-^。在线等中。。。。。。DeViLIvy快来来回答啊。。。
解决方案十一:
谁说一下为什么先执行执行Akk=newA()”,再执行A类的构造函数啊?
解决方案十二:
B要先对它的字段kk进行初始化再开始执行自己的构造函数(因为继承也就是A的构造函数了)吧
解决方案十三:
大家可能没明白我的意思,我始终认为派生类实例化时要首先要执行基类的静态构造函数,甚至是普通构造函数。例如:publicclassA{staticA(){Console.WriteLine("a");}}publicclassB:A{staticvoidMain(){Bkkk=newB();}}例子运行结果为a。但是,下面这个例子:publicclassA{staticA(){Console.WriteLine("a");}}publicclassB:A{Bkk=newB();staticvoidMain(){Bkkk=newB();}}例子运行结果:不是先输出a再执行死循环,而是直接死循环。那么为什么这个例子不是先执行静态构造函数,而是直接执行了Bkk=newB()语句呢?
解决方案十四:
好象一道面试题。接分
解决方案十五:
Mark

时间: 2025-01-20 16:56:55

c#初学者向大家请教一个问题,非常非常简单的问题的相关文章

初学者请教一个问题:关于javascript

问题描述 初学者请教一个问题:关于javascript table表单中显示有n条记录每2行换一次颜色即12用红色字体;34用绿色字体;56用红色字体;以此类推; 1 2 3 4 5 6 ...... 求帮帮忙..谢谢. 解决方案 不能取余就引个值进来好了,直接Copy运行下看看吧 <!DOCTYPE html> <html> <head><title>My Table</title></head> <style>tabl

请教一个数据库分组问题

问题描述 请教一个数据库分组问题 我写了这么一个脚本 SELECT da_sp.spdm da_sp.sp da_sp.jldw da_sp.ggxh da_sp.wbdw da_sp.wbbzl da_sp.nbdw da_sp.nbbzl da_sp.cbj da_sp.zhjj da_sp.pddw da_sp.pdxs da_sp.fdyclbj da_sp.zjpsbj xs_jxcrb.spnm sum(xs_jxcrb.cksl) as cksl isnull(c.bqsl0) a

新人请教一个sscanf中的正则表达式的问题

问题描述 新人请教一个sscanf中的正则表达式的问题 比如一串字符我要取其中的数字,df3600sdf365dssdfwef2135fewe@35@#%dsaf54我用""%*[^0-9]%[0-9]""只能取到3600,""%*[^0-9]""也错误..应该怎么取啊 解决方案 正则 直接用 d+ 即可 解决方案二: 这个应该怎么写..求写法

java-小弟想请教一个问题.对于大神们来说很简单

问题描述 小弟想请教一个问题.对于大神们来说很简单 小弟的这个程序很简单 但是对于小弟来说实在是太难了 本来前面的已经实现了,但是算总分的时候第二个人的成绩总是要和第一个成绩相加,这是程序这是运行后的结果就想问问大神怎么做把两个人的总分成绩分开 求大神帮帮忙哈 解决方案 zhongfen[i]=bianliang; 下一行加上 bianliang=0; 解决方案二: 变量 bianliang 在每次输入学生姓名是清零.

请教一个关于java的项目问题

问题描述 请教一个关于java的项目问题 解决方案 类似的http://down.51cto.com/data/2009264http://download.csdn.net/detail/u010777420/5426033 解决方案二: 你自己先试着做呗,你先熟悉Java Web从前台到后端的流程,一块块地实现,自己实现的东西,即使碰到问题,自己解决,收获会很大的. 解决方案三: 这跟我前一段时间写的 差不多, 用 java web, 我博客里有内容分页实现,登录注册,类比的可以写出来这些,

ext 权限 menu 动态-我想请教一个关于Ext JS4根据权限动态生成左侧树形菜单,和上侧Menu下拉菜单。

问题描述 我想请教一个关于Ext JS4根据权限动态生成左侧树形菜单,和上侧Menu下拉菜单. 我现在根据自己想的写了一个动态生成树的例子:数据库有 用户表 : 里面有个角色id ,角色表: 里面有个可以访问页面的Id号.然后我登陆的时候会判断用户拥有哪些id号,再根据id号生成树形菜单. 现在我在页面上侧加Menu的下拉菜单.也想根据权限生成,但是没有思路..想请教下各位,有什么例子可以借鉴 或者指点一下.谢谢啦 ~~

app-我想请教一个AS菜鸟级别问题

问题描述 我想请教一个AS菜鸟级别问题 Error:Execution failed for task ':app:processDebugManifest'. Manifest merger failed : uses-sdk:minSdkVersion 1 cannot be smaller than version 7 declared in library [com.android.support:appcompat-v7:23.0.0] D:WorkSpaceMediaPlayerap

后台-请教一个关于网站用户密码保存的问题

问题描述 请教一个关于网站用户密码保存的问题 之前自己做过一个简单的网页有登录注册功能的,但是我是直接将用户注册的名字和密码保存在数据库中,换句话说,我可以在数据库里直接看到用户的密码.当然这只是一个个人简单的小demo,但我想问一下,在实际投入运行的网站中,他们是怎样保存用户的密码的?后台人员能够从数据库中看得到用户的密码吗?如果看不到,那比如我们要修改密码的话,后台又是如何判断我输入的密码是否是原来的密码? 求教一下~谢谢~ 解决方案 一般来说,我们使用哈希(Hash)算法来存储密码. 其中

c++-请教一个CCLIENTDC的问题

问题描述 请教一个CCLIENTDC的问题 一个MFC对话框程序在DLG类的头文件里面定义一个非指针的CCLIENTDC, 在函数中不能调用,错误信息要求你初始化在构造函数里,但是这个函数怎么初始化呢 如果写成 DD(THIS),在构造函数里不能这样写,通不过,如果括号里面写成0的话 又不能在本窗体中画,就不知道跑到哪里去画了. 解决方案 菜鸟请教一个愚笨的问题在这里请教一个问题请教一个关于编码的问题 解决方案二: 错误信息,是编译出错的信息吗? 定义一个 DC,需要与上下文关联后才能使用的,否