[.net 面向对象编程基础] (23) 结束语

[.net 面向对象编程基础] (23)  结束语

这个系列的文章终于写完了,用了半个多月的时间,没有令我的粉丝们失望。我的感觉就是一个字累,两个字好累,三个字非常累。小伙伴们看我每篇博客的时间就知道了,有多少个凌晨2、3点才完成的。其实在日常工作中用起来虽然比较容易,但要是真正的写出来,又要写的让初学者能看明白,真不是一件轻松的事情,其中里面有好多示例都要考虑如何写才能通俗易懂。

写这个系列的文章,有很多也是参考了博客园和网上的文章,没有一一列举出原作者和URL,在此表示感谢和歉意。但是我可以保证,我没有纯复制粘贴过一篇文章,每写一节我都融入了自己的理解,耐心的写了每一个示例,力求不误导初学者。每一个示例都可以编译通过,正常运行。我想编程者都要有一颗OPEN的心。这样才能自己进步,也能让更多的人进步。

当有很多小伙伴还在拿着一个月3~5K的工资混日子的时候,有些人已经年薪30~50W(当然我并没有这么碉)。想一下,别人付出了多少,当你还在群里问别人类型怎么转换的时候,有些人已经在在研究架构和设计模式;当你天天抱怨程序员就是民工的时候,有些程序员开着豪车、住着别墅,身边带着N+1个妹纸(当然这些也不是我,我还在路上)。 我就想说不论你是什么职位,做什么工作,都有TOP。

这系列文章只是一个.Net面向对象的入门或者说是一个基础的文章,当然你弄懂了这些,才是打开设计模式和架构设计的钥匙。学会了这些,你可以去理抬头挺胸的去面试任何一家.net工程师。如果你学会了还没面试上,那只能说是Interviewer有眼无珠(如果还失败,那你来我们单位,^_^)当然如果有时间,我会继续写一些系列文章。

最后我发一下我的博客签名“No pains,No gains.”没有付出就没有收获,祝小伙伴们都成为大牛!

-----------------------------------------------------------------------

为了不使这篇文件没具体内容,我把我最近招聘试题附上,有了上面的知识,百分百通关!

-----------------------------------------------------------------------

C# 高级工程师 

(编号:201505060129)

要求:a.判断对错,如错误,请说明错误原因;

b.请将答案填写在答题卡上;

c.要求30分钟内完成。

1.有以下类AppleTree和Apple、Tree是继承关系,下面写法是否正确

public class Tree{ }
public class Apple{ }
public class AppleTree:Tree,Apple{}

2.有以下类Tree 和 AppleTree, AppleTree 继承于Tree, 并调用,以下写法是否正确

public class Tree
{
   public abstract Color LeafColor { get; }
}public class AppleTree:Tree{
    public override Color LeafColor
    {
         get
         {
              return Color.Green;
         }
     }
}

3. 有以下接口Tree , AppleTree 继承于Tree并实现接口成员方法,以下写法是否正确

public interface Tree
{
        void Leaf();
        void Flower();}public class AppleTree : Tree
{
       void Leaf()
       {
           Console.WriteLine("The color is green !");
       }
}

4.有类FujiAppleTree和 接口 Tree 、 AppleTree 以下写法是否正确

public class Tree
{
    Color Leaf { get; }
}
public interface AppleTree : Tree
{
    new  Color Leaf { get; }
}
public class FujiAppleTree:AppleTree
{
    public Color Leaf { get { return Color.Green; } }
}

5.以下关于TreeType枚举定义,写法是否正确

public enum TreeType:uint
{
            Apple,
            Maple=1,
            Ginkgo
}

6.以下获通过使用委托调用方法,写法是否正确

static void Main(string[] args)
{
     Console.WriteLine(GetTreeColor(TreeType.Ginkgo).Name.ToString());
}
public enum TreeType:uint { Apple,Maple, Ginkgo }public delegate Color GetTreeColor(TreeType treeType);private abstract class Tree
{
     public static Color GetTreeColor(TreeType treeType)
     {
           switch (treeType)
           {
                    case TreeType.Apple:
                         return Color.Green;
                    case TreeType.Maple:
                          return Color.Red;
                    case TreeType.Ginkgo:
                         return Color.Yellow;
                    default:
                         return Color.Green;
            }
     }
}

7.以下代码实现一个自定义事件,事件触发过程为:午夜到来-》有小偷进入-》主人呼叫狗 -》 赶走小偷,其中Dog为事件接收类,Host为事件发送类,根据以下代码判断过程描述是否正确

class Program
{
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Host host = new Host(dog);
            DateTime now = new DateTime(2008, 12, 31, 23, 59, 50);
            DateTime midnight = new DateTime(2009, 1, 1, 0, 0, 0);
            Console.WriteLine("Time... ");
            while (now < midnight)
            {
                Console.WriteLine("Now: " + now);
                System.Threading.Thread.Sleep(1000);
                now = now.AddSeconds(1);
            }
            Console.WriteLine("\n Thief: " + now);
            Console.WriteLine("The thief came.... ");
            dog.OnAlarm();
        }
}
class Dog
{
       public delegate void AlarmEventHandler(object sender, EventArgs e);
       public event AlarmEventHandler Alarm;
       public void OnAlarm()
        {
            if (this.Alarm != null)
            {
                Console.WriteLine("\Wang wang!!");
                this.Alarm(this, new EventArgs());
            }
        }
}
class Host
{
    void HostHandleAlarm(object sender, EventArgs e)
        {
            Console.WriteLine("Have caught the thief");
        }
        public Host(Dog dog)
        {
            dog.Alarm += new Dog.AlarmEventHandler(HostHandleAlarm);
        }
}

8. 以下代码输出结果为22,22,是否正确

static void Main(string[] args)
{
            int obj = 2;
            Test<int> test = new Test<int>(obj);
            Test<string> test1 = new Test<string>(obj.ToString());
            Console.WriteLine((test.obj+2)+","+(test1.obj+2));
            Console.Read();
}
class Test<T>
{
            public T obj;
            public Test(T obj)
            {
                this.obj = obj;
            }
}

9. 以下代码输出结果为“39996:USA;16665:China;”是否正确

static void Main(string[] args)
{
            List<Customer> customers = new List<Customer> {
                new Customer {ID ="A",City ="New York",Country ="USA",Region ="North
                              America",Sales =9999},
                new Customer {ID ="B",City ="New York",Country ="USA",Region ="North
                              America",Sales =9999},
                new Customer {ID ="C",City ="XiAn",Country ="China",Region ="Asia",
                              Sales =7777},
                new Customer {ID ="D",City ="New York",Country ="USA",
                              Region ="North America",Sales =9999},
                new Customer {ID ="E",City ="BeiJing",Country ="China",
                              Region ="Asia",Sales =8888},
                new Customer {ID ="F",City ="New York",Country ="USA",
                              Region ="North America",Sales =9999}
         };
         var orderedResults = from cg in (from c in customers
                        group c by c.Regioninto cg
                        select new { TotalSales = cg.Sum(c => c.Sales), Region = cg.Key })
                        orderby cg.TotalSales descending
                        select cg;

            string result="";
            foreach (var item in orderedResults)
                  result +=  item.TotalSales + ":" + item.Region+";";
            Console.WriteLine(result);
            Console.ReadLine();
         }
}

10. 以下程序调用部分执行后,通过反射执行方式是否正确

 //调用部分
 namespace ConsoleApplication1
 {
    class Program        {
       static void Main(string[] args)
        {
           string SpaceName =  System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace;
            string ClassType = Console.ReadLine();
            object obj = Assembly.GetExecutingAssembly().CreateInstance(SpaceName+".OranageTree", false);
            object obj2 = Type.GetType(SpaceName + ".OranageTree").GetMethod(ClassType + "Color").Invoke(obj, null);
            Console.ReadLine();
        }
    }
 }
//实现部分
namespace ConsoleApplication2
{
     public class OranageTree
    {
        public static void FruitColor()
        {
            Console.WriteLine("Oranage Fruit Color:Oranage");
        }

        public static void LeafColor()
        {
            Console.WriteLine("Oranage Leaf Color:Green");
        }
    }
}

C# 高级工程师  答题卡


姓名


 


应聘职位


序号


正确(Y)错误(N)


原因(如错误,请在此说明错误原因)


1


 


 


2


 


 


3


 


 


4


 


 


5


 


 


6


 


 


7


 


 


8


 


 


9


 


 


10


 

 

==============================================================================================

返回目录 <如果对你有帮助,记得点一下推荐哦,有不明白的地方或写的不对的地方,请多交流>

QQ群:467189533

==============================================================================================

时间: 2024-10-13 23:24:33

[.net 面向对象编程基础] (23) 结束语的相关文章

[.net 面向对象编程基础] (22) 事件

[.net 面向对象编程基础] (22)  事件 事件(Event)是学习.net面向对象编程很重要的一部分,在学习事件之前,我们实际上已经在很多地方使用了事件,比如控件的click事件等,这些都是.net设计控件的时候已经定义好的事件.除此之外,我们同样可以自己定义事件. 事件实际上是一种消息机制,当然点击控件时,click就通知处理他的方法去处理,实际上就是前面说的委托.因此我们可以说:事件是一种具有特殊签名的委托.而事件/消息机制是windows的核心,因此我们必须掌握他. 为了更加容易理

[.net 面向对象编程基础] (20) LINQ使用

[.net 面向对象编程基础] (20)  LINQ使用 通过上节LINQ的基础知识的学习,我们可以开始使用LINQ来进行内存数据的查询了,我们上节说了LINQ的定义为:Language Integrated Query(语言集成查询)的简称,它是集成在.NET编程语言中的一种特性. 1.LINQ的构架 从这幅图中,我们可以知道LINQ包括五个部分:LINQ to Objects.LINQ to XML.LINQ to SQL.LINQ to DataSet.LINQ to Entities.

[.net 面向对象编程基础] (14) 重构

[.net 面向对象编程基础] (14) 重构 通过面向对象三大特性:封装.继承.多态的学习,可以说我们已经掌握了面向对象的核心.接下来的学习就是如何让我们的代码更优雅.更高效.更易读.更易维护.当然了,这也是从一个普通程序员到一个高级程序员的必由之路.就看病一样,普通医生只能治标,高级医生不但看好病,还能除病根. 1.什么时重构? 重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性.

[.net 面向对象编程基础] (21) 委托

[.net 面向对象编程基础] (20)  委托 上节在讲到LINQ的匿名方法中说到了委托,不过比较简单,没了解清楚没关系,这节中会详细说明委托. 1.什么是委托? 学习委托,我想说,学会了就感觉简单的不能再简单了,没学过或都不愿了解的人,看着就头大,其实很简单.委托在.net面向对象编程和学习设计模式中非常重要,是学习.net面向对象编程必须要学会并掌握的. 委托从字面上理解,就是把做一些事情交给别人来帮忙完成.在C#中也可以这样理解,委托就是动态调用方法.这样说明,就很好理解了. 平时我们会

[.net 面向对象编程基础] (17) 数组与集合

[.net 面向对象编程基础] (17) 数组与集合 学习了前面的C#三大特性,及接口,抽象类这些相对抽象的东西以后,是不是有点很累的感觉.具体的东西总是容易理解,因此我们在介绍前面抽象概念的时候,总是举的是具体的实例以加深理解. 本节内容相当具体,学起来也相当轻松. 1.数组 1.1 什么是数组? 数组是一种数据结构,包含同一个类型的多个元素. 1.2数组的初始化 string[] mystringArray; 类型+方框号 数组名 1.3数组初始化 我们知道数组是引用类型,所以需要给他分配堆

[.net 面向对象编程基础] (16) 接口

[.net 面向对象编程基础] (16) 接口 关于“接口”一词,跟我们平常看到的电脑的硬件“接口”意义上是差不多的.拿一台电脑来说,我们从外面,可以看到他的USB接口,COM接口等,那么这些接口的目的一就是让第三方厂商生产的外设都有相同的标准,也是提供一个对外通信或操作的入口. 只是C#的接口除了以上特点之外,还具有一种类似于模板的功能,我们定义一组接口,就像是一个模板.这点和抽象类不同,抽象类是先有子类或都子类的概念,从中抽象出一个类.而接口更像是我们要设计一台机器,先把这台机器对外的功能接

[.net 面向对象编程基础] (18) 泛型

[.net 面向对象编程基础] (18) 泛型 上一节我们说到了两种数据类型数组和集合,数组是指包含同一类型的多个元素,集合是指.net中提供数据存储和检索的专用类. 数组使用前需要先指定大小,并且检索不方便.集合检索和声明方便,但是存在类型安全问题,本来使一个类型安全的C#变得不安全了. 集合为了解决数组预设大小的问题,采取了一种自动扩容的办法,这样当大小不够时,他就创建一个新的存储区域,把原有集合的元素复制过来.如此又对性能上也是有很大的影响. 上节我们说到解决这些缺陷的方法,那就是.NET

[.net 面向对象编程基础] (15) 抽象类

[.net 面向对象编程基础] (15) 抽象类 前面我们已经使用到了虚方法(使用 Virtual修饰符)和抽象类及抽象方法(使用abstract修饰符)我们在多态一节中说到要实现类成员的重写必须定义为一个虚方法或抽象方法.这节单独把抽象类提出来,是因为抽象是.net实现面向对象编程重要的重要思想,定义抽象类就象一个模板一个提纲,它可以理解为中央的指导思想,我们通过派生类去具体实现它.由此可见,抽象类本身没有任何作用,也不能被实例化,因为他本身就不具有具体的事物.比如上节的动物类的例 子,我们实

[.net 面向对象编程基础] (11) 面向对象三大特性——封装

[.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承.多态. 1.封装概念 封装:每个对象都包含有它能进行操作的所有信息,这个特性称为封装.这样的方法包含在类中,通过类的实例来实现. 2.封装的优点 A.良好的封装能够减少耦合(比如实现界面和逻辑分离) B.可以让类对外接口不变,内部可以实现自由的修改 C.类具有清晰的对外接口,使用者只需调用,无需关心