对文章“面试官,请你不要装高深”的简单回答

原文地址:http://www.cnblogs.com/xcj26/archive/2010/07/10/1775031.html#commentform

 

其实,在看待一个问题的时候,首先是一个态度问题;
面试官既然出了这道题,说明他在工作中碰到过类似的问题,既然是来面试的,我们就应该尊重他,尊重他在工作中的这种发现,并试着去回答他的问题。

我经常和手下以及新来的员工说,虽然前辈们写的代码有很多问题,有些并不合理,但是他们并不比你笨,请不要先抱怨,先试着去了解那些令你讨厌的代码,然后在这个基础之上去创新,写出更好的代码,设计出更好的架构,这才是我们需要做的。

 

关于上面的问题,((A)b).Dosomething()这样的调用方式无非是想得到A中函数Dosomething的执行结果;

我们试着改造一下上面的面试题,代码如下:
[code=csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            b.Dosomething();

            ((A)b).Dosomething();

            Console.ReadLine();
        }
    }

    public class A
    {
        private int m_iCount = 0;
        public virtual int Count
        {
            get { return m_iCount; }
            set { m_iCount = value; }
        }
        public virtual void Dosomething()
        {
            Console.WriteLine(string.Format(" The  a dosomething! count:{0}", m_iCount * 2));
        }
    }

    public class B : A
    {
        public B()
        {
            Count = 100;
        }
        public new void Dosomething()
        {
            Console.WriteLine(string.Format(" The  b dosomething! count:{0}", Count));
        }
    }

}

[/code]

执行结果如下:

 

我们来考虑这样一个场景:我来公司之前,有一个同事已经把B中的方法Dosomething写成了这样public new void Dosomething()的形式;

而在软件中,创建B以及调用B的函数Dosomething的代码到处都是,现在由于某部分代码中的需要,需要通过类B中对count的计算后,以A中函数Dosomething所计算或者组合或者编码后的结果输出来;
大家想想,我们该怎么办? 我们能去改变B中对函数Dosomething的定义吗?不行阿!

我们已经说过,这个函数在其他代码中到处调用,不能乱改的,那怎么办?简单的办法就使用((A)b).Dosomething()这样子的调用了;

 

个人觉得,面试官考察的是某些实际的场景,软件中实际存在的问题,并不是纯技术的问题,如果我事先知道由于软件的变动会产生其他需要,B中的代码我们还会这样写吗?不会阿!技术上更不会这样写阿!
所以,我们不能单纯从技术的角度来回答这个问题。

 

posted @ 2010-07-11 09:37  johnsir  阅读(2967)  评论(13编辑  收藏  举报