純粹文法學習
使用C#編寫17種Hello World程式
--------------------------------------------------------------------------------
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) //會用異常處理了,但如何更好回收資源呢?異常接下來應該是資源回收啊?我以前也犯這種毛病,GC應該怎麼更好使用,我到現在還不是很純熟
{
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 //我不會again!補習去again!
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 //平常我也不注意這個!到現在還不是很理解怎麼Unsafe!
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
{ //COM , API介面 我以前就這麼低俗地理解. 其實工具會幫你產生
[DllImport("kernel32")]
private static extern int Beep(int dwFreq, int dwDuration);
static void Main(string[] args)
{
Console.WriteLine("Hello World");
Beep(1000, 2000);
}
}