码迷,mamicode.com
首页 > 编程语言 > 详细

语言入门必学的基础知识你还记得么?

时间:2018-04-17 23:49:13      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:exception   原来   alt   部分   关系   code   图片   缩减   函数   

不管我们学习什么语言,一开始都是语法,对于面向对象的语言来讲,学习完语法之后,就是OOP了,主要还是三大概念:继承,多态,封装。而且我们经常也会遇到一些面试题,会考察我们父子类之间的继承关系等。

这段时间深造ASP.NET-MVC框架,研读<<asp.net-mvc框架揭秘>>一书的时候,感觉到了自己的不足与渺小。尽管大三就看过这本书,但那时候看的懵逼,半知半解吧。再过了差不多一年之后再回头看这本书,学到了不同的知识,也看到了不同的一面,这说明自己也是在逐步提升的。这两天研读Controller激活原理的时候,深入的思考了一下,下载了源码看,发现看的很是懵逼啊,<<揭秘>>一书尽管一开始就写了个简单地mvc框架,但是相比较于源码中的代码还是缩减了很多,不过我看源码还是看的很懵逼,主要还是各个类之间的实现以及解耦的设计太好了,有一部分我特别不懂,于是自己写了个demo分析,分析完之后发现原来就是父子类之间的继承关系而已,以及C#特有的委托特性。不多说,直接上我的demo:

using System;

namespace ConsoleApp1
{
    public class MyTest2
    {
        public MyTest2(Func<string> func)
        {
            if(func==null)
            {
                throw new ArgumentNullException("error ... ");
            }
            func();
            Console.WriteLine("successful ... ");
        }
    }

    public class MyTest
    {
        public Func<string> _func = Func_Test;

        private static MyTest _instance = new MyTest();

        public MyTest() : this(null)
        {
            Console.WriteLine("Construction .... ");
        }

        public MyTest(MyTest2 s)
        {
            MyTest2 _s = s ?? new MyTest2(_func);
        }
        
        public static MyTest Current
        {
            get { return _instance; }
        }

        public static string text
        {
            get { return "text .... "; }
        }

        public void Beta()
        {
            Console.WriteLine("function be called");
        }

        public static string Func_Test()
        {
            return null;
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            MyTest.Current.Beta();
            
            Console.Read();
        }
    }
}

我一开始就看不懂在_func属性明明就是返回来了null,在MyTest2中的if判断应该成立啊,后来断点调试看了下:
技术分享图片

这是内存地址啊,后来我改了下:

public Func<string> _func = () => null;

改成了:

public Func<string> _func = Func_Test;

后来才反应过来,原来传递的参数根本就是一个函数地址而已,if中的null是用来判断是不是没有传参的。

其次就是构造函数了,我已开始比较纳闷MyTest的第二个构造函数是怎么调用的,后来想想原来是第一个构造函数继承自了this(null),引发了调用!

通过这个demo也算是让自己巩固了基础吧。

语言入门必学的基础知识你还记得么?

标签:exception   原来   alt   部分   关系   code   图片   缩减   函数   

原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/8870540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!