• 面向对象的问题:过度封装


    C++有类,弄出来的是“树”状的,结果一个东西就被埋得越来越深。a.b.c.d.e.f(g.h.i(j.k))。C没有类,函数一律平铺。

    好多年前在网上看到过一个很有意思的东西,Helloworld的17种写法,很好的讽刺。作者已不可考。

    1. A Beginners Hello World

    public class HelloWorld
    {
       public static void Main()
       {
         System.Console.WriteLine("HELLO WORLD");
       }
    }

    2. Slightly improved version

    using System;
    public class HelloWorld
    {
       public static void Main()
       {
         Console.WriteLine("HELLO WORLD");
       }
    }

    3. Command Line Arguments

    using System;
    public class HelloWorld
    {
       public static void Main(string[] args)
       {
         Console.WriteLine(args[0]);
       }
    }

    4. From Constructor

    using System;
    public class HelloWorld
    {
       public HelloWorld()
       {
         Console.WriteLine("HELLO WORLD");
       }

       public static void Main()
       {
         HelloWorld hw = new HelloWorld();
       }
    }

    5. More OO

    using System;
    public class HelloWorld
    {
       public void helloWorld()
       {
         Console.WriteLine("HELLO WORLD");
       }

       public static void Main()
       {
         HelloWorld hw = new HelloWorld();
         hw.HelloWorld();
       }
    }

    6. From another class

    using System;
    public class HelloWorld
    {
       public static void Main()
       {
         HelloWorldHelperClass hwh = new HelloWorldHelperClass();
         hwh.writeHelloWorld();
       }
    }

    public class HelloWorldHelperClass
    {
       public void writeHelloWorld()
       {
         Console.WriteLine("Hello World");
       }
    }

    7. Inheritance

    abstract class HelloWorldBase
    {
       public abstract void writeHelloWorld();
    }
    class HelloWorld : HelloWorldBase
    {
       public override void writeHelloWorld()
       {
         Console.WriteLine("Hello World");
       }
    }
    class HelloWorldImp
    {
       static void Main() {
         HelloWorldBase hwb = HelloWorld;
         HelloWorldBase.writeHelloWorld();
       }
    }

    8. Static Constructor

    using System;
    public class HelloWorld
    {
       private static string strHelloWorld;

       static HelloWorld()
       {
         strHelloWorld = "Hello World";
       }
       void writeHelloWorld()
       {
         Console.WriteLine(strHelloWorld);
       }

       public static void Main()
       {
         HelloWorld hw = new HelloWorld();
         hw.writeHelloWorld();
       }
    }

    9. Exception Handling

    using System;
    public class HelloWorld
    {
       public static void Main(string[] args)
       {
         try
         {
           Console.WriteLine(args[0]);
         }
         catch(IndexOutOfRangeException e)
         {
           Console.WriteLine(e.ToString());
         }
       }
    }

    10. Creating a DLL and using it in an application

    using System;
    namespace HelloLibrary
    {
       public class HelloMessage
       {
         public string Message
         {
           get
           {
             return "Hello, World!!!";
           }
         }
       }
    }

    //------

    using System;
    using HelloLibrary;

    namespace HelloApplication
    {
       class HelloApp
       {

         public static void Main(string[] args)
         {
           HelloMessage m = new HelloMessage();

         }
       }
    }

    11. Using Property

    using System;
    public class HelloWorld
    {
       public string strHelloWorld
       {
         get
         {
           return "Hello World";
         }
       }

       public static void Main()
       {
         HelloWorld hw = new HelloWorld();
         Console.WriteLine(cs.strHelloWorld);
       }
    }

    12. Using Delegates

    using System;
    class HelloWorld
    {
       static void writeHelloWorld() {
         Console.WriteLine("HelloWorld");
       }
       static void Main() {
         SimpleDelegate d = new SimpleDelegate(writeHelloWorld);
         d();
       }
    }

    13. Using Attributes

    #define DEBUGGING
    using System;
    using System.Diagnostics;

    public class HelloWorld : Attribute
    {
       [Conditional("DEBUGGING")]

       public void writeHelloWorld()
       {
         Console.WriteLine("Hello World");
       }

       public static void Main()
       {
         HelloWorld hw = new HelloWorld();

         hw.writeHelloWorld();
       }
    }

    14. Using Interfaces

    using System;
    interface IHelloWorld
    {
       void writeHelloWorld();
    }

    public class HelloWorld : IHelloWorld
    {
       public void writeHelloWorld()
       {
         Console.WriteLine("Hello World");
       }

       public static void Main()
       {
         HelloWorld hw = new HelloWorld();

         hw.writeHelloWorld();
       }
    }

    15. Dynamic Hello World

    using System;
    using System.Reflection;

    namespace HelloWorldNS
    {

       public class HelloWorld
       {
         public string writeHelloWorld()
         {
           return "HelloWorld";
         }

         public static void Main(string[] args)
         {
           Type hw = Type.GetType(args[0]);

           // Instantiating a class dynamically

           object[] nctorParams = new object[] {};
           object nobj = Activator.CreateInstance(hw,
                   nctorParams);

           // Invoking a method

           object[] nmthdParams = new object[] {};
           string strHelloWorld = (string) hw.InvokeMember(
                   "writeHelloWorld", BindingFlags.Default |
                   BindingFlags.InvokeMethod, null,
                   nobj, nmthdParams);

           Console.WriteLine(strHelloWorld);
         }
       }
    }

    16. Unsafe Hello World

    using System;
    public class HelloWorld
    {
       unsafe public void writeHelloWorld(char[] chrArray)
       {
         fixed(char *parr = chrArray)
         {
           char *pch = parr;
           for(int i=0; i<chrArray.Length; i++)
             Console.Write(*(pch+i));
         }
       }

       public static void Main()
       {
         HelloWorld hw = new HelloWorld();
         char[] chrHelloWorld = new char[]
             {'H','e','l','l','o', ' ', 'W','o','r','l','d'};
         hw.writeHelloWorld(chrHelloWorld);
       }
    }

    17. Using InteropServices

    using System;
    using System.Runtime.InteropServices;

    class Class1
    {
       [DllImport("kernel32")]
       private static extern int Beep(int dwFreq, int dwDuration);

       static void Main(string[] args)
       {
         Console.WriteLine("Hello World");
         Beep(1000, 2000);

     
  • 相关阅读:
    编译原理-确定有穷自动机(deterministic finite automata ,DFA)
    编译原理-正规式和正规集
    linux之sed用法
    Linux 中find命令
    运维工作应该掌握哪些技能?
    Last_SQL_Error: Error 'Can't drop database
    关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法
    python3.7安装, 解决pip is configured with locations that require TLS/SSL问题
    Linux date命令的用法(转)
    MySQL回滚到某一时刻数据的方法
  • 原文地址:https://www.cnblogs.com/ageane/p/oop.html
Copyright © 2020-2023  润新知