• 复习 控件开发读书笔记


    才隔两天,看“控件开发读书笔记”的代码时,又是不知道自己当初讲什么。复习一下后,自己又产生几个简单的问题。

    一、方法除了用来重写外,还可以用来调用
    以前,不是面对对象编程时,函数或子程序都是用来调用的,没有继承或重写的概念。现在练习了面对对象编程,结果只想到方法是用来继承、重写的,没想到它还可以用来调用。所以,继承就会遇到一个问题,如果子项不知道父项的结构,随意调用,一定会导致死循环。
    using System;

    class m
    {
      public static void Main()
      {
        b b1=new b();
        b1.bb();
      }
    }

    class a
    {
      public virtual void aa()
      {
        Console.WriteLine("a.aa()");
        bb();
      }

      public virtual void bb()
      {
        Console.WriteLine("a.bb()");
      }
    }

    class b : a
    {
      public override void bb()
      {
        aa();
      }
    }

    虽然传统编程中这样的事情也会发生,但由于代码都在一个程序中,因此比较容易发现,也比较容易避免。但在面向对象编程中,由于父类被封装了,因此子类继承父类时,写的代码好像并没有问题,但事实上却是出错了。
    如何看到父类的代码?这里有一个reflector工具,被称为.Net程序员必备的工具之首。
    我把以上类a提出来改成DLL的形式,用如下命令编译:
    csc /t:library ta.cs
    csc t1.cs /r:ta.dll
    然后再用reflector工具打开ta.dll,系统清楚地把我的代码体现出来。不错!不错!

    二、WebControl的RenderBeginTag方法与writer中的RenderBeginTag方法不是同一个东西。
    我们自己写的控件可以重写RenderBeginTag方法,生成多重开始标签,但一般情况下,我们用TagKey来更改控件的Tag。
    而writer也有一个RenderBeginTag方法,它是输出类似<DIV>这个东西的,与WebControl的RenderBeginTag无关。

     

  • 相关阅读:
    CodeForces 626 DIV.2 D Present
    PageRank 算法初步了解
    LeetCode 329. Longest Increasing Path in a Matrix(DFS,记忆化搜索)
    LeetCode 312. Burst Balloons(DP)
    LeetCode Contest 180
    用js来实现那些数据结构12(散列表)
    用js来实现那些数据结构11(字典)
    用js来实现那些数据结构10(集合02-集合的操作)
    用js来实现那些数据结构09(集合01-集合的实现)
    用js来实现那些数据结构08(链表02-双向链表)
  • 原文地址:https://www.cnblogs.com/yzx99/p/1371853.html
Copyright © 2020-2023  润新知