zoukankan      html  css  js  c++  java
  • 复习 控件开发读书笔记

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

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

     

  • 相关阅读:
    [leetcode]259. 3Sum Smaller 三数之和小于目标值
    题型总结之K Sum
    [Leetcode]167. Two Sum II
    题型总结之Sliding Window
    [Leetcode]703. Kth Largest Element in a Stream 数据流中的第 K 大元素
    [Leetcode]307. Range Sum Query
    pycharm同一目录下无法import明明已经存在的.py文件
    python高级特性:迭代器与生成器
    self的含义,为什么类调用方法时需要传参数?
    git三:远程仓库GitHub
  • 原文地址:https://www.cnblogs.com/yzx99/p/1371853.html
Copyright © 2011-2022 走看看