zoukankan      html  css  js  c++  java
  • [和管子对话] 3 2007411/从堆栈到反射,想哪儿打哪儿

    发布日期:2007.4.11 作者:Anytao

    ©2007 Anytao.com 转贴请注明出处,留此信息。

    本文将介绍以下内容:

    • 浅议堆栈

    • 乱图反射

    • 胡言乱语的技术

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

    管语:

    平常说堆是堆,栈和堆栈这个名词是一样的

    栈不需要程序员来操心,由编译器来负责,堆需要你维护,C++中的new和delete就是干这事的
    在C#和java中,堆也不需要了,有垃圾自动收集

    EJB的实体Bean分为BMP和CMP两种
    我觉着这和堆、栈像,堆就是BMP,栈是CMP
    BMP是用户管理bean生命周期
    CMP是容器管理bean生命周期

    王论:

    哦,知道SharePoint吗?

    管语:

    哦!就是微软的Portal解决方案!

    大公司都有Portal解决方案 IBM/BEA,好像oracle也有的

    王论:

    给我解释一下Portal吧,是门户解决方案的意思吧

    网上公文流转,工作流什么的,都是流转的office文件,word最多,sharepoint是MS的,先天优势就不用说了,其实最主要还是office牛X呀!

    管语:

    我认为通俗地说,portal就是企业门户,这里边什么都有!有这个企业的日常办公、核心业务什么的,就是吃喝拉撒睡,这里一锅烩了!

    什么是Portal?英文字面是“入口”,国内有叫“门户”技术的,但我觉得“集成”技术更能表达它的意思。Portal是一个基于web的应用程序,它主要提供个性化、单点登录、不同来源的内容整合以及存放信息系统的表示层。

    今天题目我来定,先考你一下:P

    接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类(concrete class)?

    王论:

    接口可以继承接口;抽象类可以实现接口;抽象类不能继承实体类;

    最后一个没把握

    管语:

    最后一个的答案是:当实体类有明确的构造函数时,可以,没有时,不可以

    王论:

    问题是,抽象类继承实体类,用来做什么

    呵呵,我写了一段代码,发现这样写根本没有意义,抽象类不能实体化,让他继承实体类,没有意义

    管语:

    不知道这问题有意义吗?这是网上说的java经典面试题,

    王论:

    我认为抽象类一般都是在类结构的上层

    王论:

    我试过了,继承下来没有问题,就是实体类-抽象类-实体类的办法没有问题,基本和一般的继承区别不大,但是中间那一层作为抽象类,实在没有什么意义,还强迫最下层的类实现其抽象方法,不过,我还真没发现这种继承的意义何在,完全颠覆了抽象类作为公共定义的意义。

    另外实体类,可以没有明确定义构造函数,抽象类继承也没有问题。

    以下是一个示例:  

     1using System;
     2
     3namespace Anytao.Mynet
     4{
     5    public class Dog2
     6    {
     7        public virtual void Yelp()
     8        {
     9            Console.Write("Dog yelp.");
    10        }
       
    11    }

    12
    13    public abstract class AnimalLive: Dog2
    14    {
    15        protected string _name;
    16        public string Name
    17        {
    18            get return _name; }
    19            set { _name = value; }
    20        }

    21        public abstract int GetName
    22        {
    23            get;
    24        }

    25
    26        public abstract void Run();
    27
    28        public override void Yelp()
    29        {
    30            Console.WriteLine("Animal Yelp");
    31        }

    32    }

    33
    34    public class Duck2 : AnimalLive
    35    {
    36        public override void Run()
    37        {
    38            throw new Exception("The method or operation is not implemented.");
    39        }

    40
    41        public override int GetName
    42        {
    43            get throw new Exception("The method or operation is not implemented."); }
    44        }

    45    }

    46
    47    public class Test
    48    {
    49        static void Main(string[] args)
    50        {
    51            Dog2 dog = new Dog2();
    52            dog.Yelp();
    53
    54            Duck2 duck = new Duck2();
    55            duck.Yelp();
    56
    57            AnimalLive animal = new Duck2();
    58            animal.Yelp();
    59        }
     
    60    }

    61
    62}

    63

     管语:

    我们讨论反射吧,C#中有反射机制吗?

    王论:

    反射技术太牛了

    反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件 通过对类型动态实例化后,还可以对其执行操作 一般用于插件式框架程序和设计模式的实现,当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情

    我的理解是,你甚至可以利用发射调用任何Dll中的函数、属性、方法等

    Assembly assembly = Assembly.LoadFile(“DGGL.dll”);

    管语:

    SUN看看关于java中的reflection(反射)机制的教学就全明白了。Java虽然不想Ruby,Python那样是动态语言,但它确提供了一种叫做Reflection的机制能够在程序运行时得到类和方法本身的一些meta data。这样做的一大好处在于减少大量的hard coding。Reflection机制甚至能帮助你动态加载某个类。写过JDBC的人都知道Class.forName(drivername),其中drivername是String类型,能够在运行时确定,因此加载数据库驱动类的行为也就在运行时发生了,而非编译时。

    你的意思是利用反射,可以达到另外一种强的效果,比如调用本地的DLL,这个反射,似乎是动态编译

    王论:

    非也,调用本地Dll只是个例子,反射在设计模式中经常可以发挥巨大的作用,例如工厂类中,一个小例子看看:

    1     class Reflection2Factory
    2     {
    3         public static void Main(string[] args)
    4         {
    5             IRun animalRun = RunFactory.GetRun();
    6             animalRun.Run();            
    7         }
    8     }
     1     public interface IRun
     2     {
     3         void Run();
     4     }
     5 
     6     public class DogRun : IRun
     7     {
     8         public void Run()
     9         {
    10             Console.WriteLine("Dog is running");
    11         }
    12     }
    13 
    14     public class DuckRun : IRun
    15     {
    16         public void Run()
    17         {
    18             Console.WriteLine("Duck is running");
    19         }
    20     }



    运行结果为:


    问题抛出:

    1 抽象类,可以从实体类继承,这样实现的意义何在,在什么场合有用?请大家畅所欲言。

    2 反射的典型应用还有哪些?

    ©2007 Anytao.com 转贴请注明出处,留此信息。

    本贴子以现状提供且没有任何担保,同时也没有授予任何权利。
    This posting is provided "AS IS" with no warranties, and confers no rights.

  • 相关阅读:
    Todo
    我的类
    Python socket编程之七:多窗口的应用
    iOS与PHP/Android AES128 ECB NoPadding加密
    JSONModel简便应用
    iOS开发系列--UITableView全面解析
    常用方法
    OC和C++混编
    数据层
    block
  • 原文地址:https://www.cnblogs.com/anytao/p/709303.html
Copyright © 2011-2022 走看看