惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
The Cloudflare Blog
J
Java Code Geeks
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
L
LangChain Blog
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
I
InfoQ
博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
H
Help Net Security
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 得易失易积薄不宏

axios调用webapi报错 MySql重装以后,修改数据库路径,打开以前的数据库报Table 'XX库.XX表' doesn't exist错误的解决办法 SqlServer2012,设置指定数据库对指定用户开放权限 win10无法访问服务器上的共享文件夹怎么设置,提示:你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问 Vs2017的git的坑 jira6.3.6创建问题不自动发邮件通知的问题 在windows下面配置redis集群遇到的一些坑 SqlServer2008 无法修改表,超时时间已到 在操作完成之前超时解决方法 .Net MVC HTTP 错误 404.0 - Not Found 解决方法 新建mvc项目iis报404错误! 怎么在本地调试其他机器网站执行代码 今天2003的iis 始终无法访问。net2.0的项目,原来是web服务扩展没有2.0的扩展 下面是加上的方法 .net 查询excel记录为空的解决办法 - 得易失易积薄不宏 - 博客园 最近想写一个bs结构的后台权限控制 http/1.1 forbidden 问题方法 winfrom DataGridView 关闭自动创建列 .net 操作Access的一个奇怪的问题 目前我见过的.net开源的或者免费的比较好的资源 对于三层结构运用ActiveRecord的感想
一个有趣的C#面试题 - 得易失易积薄不宏 - 博客园
得易失易积薄不宏 · 2008-01-02 · via 博客园 - 得易失易积薄不宏

一次面试 做了一道题
内容如下
这道题是这样的 有四个类

public class ClassA
 
{
        
public virtual void print()
        
{
            Console.WriteLine(
"My ClassA");
        }

 }


public class ClassB:ClassA
 




public class ClassC:ClassB
 
{
        
public virtual void print()
        
{
            Console.WriteLine(
"My ClassC");
        }


 }




public class ClassD:ClassC
 
{
         
public override void print()
        
{
            Console.WriteLine(
"My ClassD");
        }

 }

调用

  ClassC Obj1=new ClassD();
            Obj1.print();

           ClassB Obj2
=new ClassD();
           Obj2.print();

            ClassA Obj3
=new ClassD();
            Obj3.print();

结果
My ClassD
My ClassB
My ClassB

前两个结果好理解

但是第三个结果

ClassA Obj3=new ClassD();
 Obj3.print();
My ClassB

为什么会这个样子 ?
翻了好多资料,
忽然想起里好几个月前曾经看过一篇文章:
<<我是谁>>

http://allenlooplee.cnblogs.com/archive/2005/11/24/283578.html
于是找出来 又仔细看了一下  突然感觉自己大约可能理解了
ClassA Obj3=new ClassD();
这句代码 是声明一个受ClassA特征约束的ClassD对象 也就是说ClassA对Obj3屏蔽了除ClassA以外的特征(描述的不太准确 )
而ClassD 继承了类 C->B->A 
这样 ClassD 本身的Print方法是不会被调用的  C的也不会调用 为什么会调用B的  而不调用A的呢?
我的理解是 B的方法 重写了A的方法   也就是说 B的Print 能够通过A的特征约束.  而Obj3 是D的对象,  D又继承C, C继承B ,所以, D也具有B的特征! 调用优先级应该是从子类到基类, 也就是说D大于C C大于B B大于A,  而D 和C 都因为没有重写A的方法,肯定通不过 A的特征约束  所以  
ClassA Obj3=new ClassD();
 Obj3.print();

必定会输出
 My ClassB

不过目前 这些都是我自己个人理解   希望高手能指出我的理解错误 和不对的地方