C Sharpと.Net学習ノート(一)

9257 ワード

C#と.Netはすべてゼロの基礎で、1~2週間先に何かを補う必要があります.特に2012.01を記録します.11
C#コンソールプログラム
入門用のhello worldプログラムは以下の通りです.
using System;

class CSharpTest
{
    static void Main()
    {
        Console.WriteLine("Hello world not using Qt");
    }
}

コンパイル
E:\Test1> csc hello.cs

うんてん
E:\Test1> hello
Hello world not using Qt

問題はありますか?
  • 戻り値は何ですか?
  • コマンドラインパラメータはどのように取得しますか?
  • 入口はMainでなければなりませんか?複数のクラスがあれば、どうやって入り口の
  • を見つけますか?
  • ...

  • いりぐちてん
    使用可能なエントリポイント(必要に応じてクラスの静的メンバー関数、MSDNのHello World in Visual C#にpublicでなければならないと記載されていますが、privateも問題ないようです):
  • static void Main()
  • static int Main()
  • static void Main(string[] args)
  • static int Main(string[] args)

  • 次のようなプログラムなら、直接csc hello.csコンパイルですか?
    using System;
    
    class CSharpTest
    {
        static void Main()
        {
            Console.WriteLine("Hello world not using Qt");
        }
    }
    
    class CSharpTest2
    {
        static void Main(string [] args)
        {
            Console.WriteLine("Hello world not using Qt too");
        }
    }

    どのように解決しますか?使用可能
    csc /main:CSharpTest  hello.cs

    または
    csc /main:CSharpTest2  hello.cs

    エントリポイントを選択します.
    1つのクラス内に複数のエントリポイント関数があると、仕方がないようです(fixme)
    戻り値
  • の戻り値はintのエントリポイントであり、returnを直接使用すれば
  • である.
    using System;
    
    class CSharpTest
    {
        static int Main()
        {
            Console.WriteLine("Hello world not using Qt");
            return 1;
        }
    }

    結果
    E:\Test1>hello
    Hello world not using Qt
    
    E:\Test1>echo %errorlevel%
    1

    システムを直接使用することができる.Environment.Exit
    using System;
    
    class CSharpTest
    {
        static void Main()
        {
            Console.WriteLine("Hello world not using Qt");
            Environment.Exit(1);
        }
    }

    エントリポイント関数が値intを返すかどうかを考慮する必要はありません
    コマンドラインパラメータ
    何も言うことはないようですが、C++との違いは、パラメータの1つ目がプログラム名ではないことです.
    using System;
    
    class CSharpTest
    {
        static void Main(string[] args)
        {
            foreach (string arg in args)
                Console.WriteLine(arg);
        }
    }

    結果:
    E:\Test1>hello Qt5 Qt4 Qt3
    Qt5
    Qt4
    Qt3

    Guiプログラム(Windows Forms)
    Windowsを使用するには、次の手順に従います.
    using System.Windows.Forms;
    
    class CSharpTest
    {
        static void Main()
        {
            MessageBox.Show("Hello World not using Qt");
        }
    }

    このようにコンパイルしますか?
    csc hello.cs

    はい、いいです.cmdウィンドウがポップアップしているだけです.指定が必要
    csc /arget:winexe hello.cs

    一般的に、アプリケーション(プログラムの起動、停止、メッセージ処理などを制御するための)を使用する必要があります.
    using System.Windows.Forms;
    
    public class Form1 : Form
    {
        public static void Main()
        {
            Application.Run(new Form1());
        }
    
        public Form1()
        {
            this.DoubleClick += new System.EventHandler(form_Click);
        }
    
        private void form_Click(object sender, System.EventArgs e)
        {
            Application.Exit();
        }
    }

    コンパイルコマンド
    Guiプログラム(WPF)
    これは最も簡単なWPFのプログラムではないでしょうか.
    using System.Windows;
    
    public class WpfTest1
    {
        public static void Main()
        {
            MessageBox.Show("WPF Applicaiton Test");
        }
    }

    コンパイル(これらのreference,fixmeを指定する必要があるようです):
    E:\Test1>csc /target:winexe /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\W
    indowsBase.dll"  hello.cs

    通常、アプリケーションが必要です(Windows.Formsとは同じではありません)
    using System.Windows;
    
    public class WpfTest1
    {
        public static void Main()
        {
            Application app = new Application();
            app.Run();
        }
    }

    コンパイルコマンド
    xamlがあれば、コマンドラインツールだけでは難しいようです.csprojのようなエンジニアリングファイルが必要で、msbuildまたはvisual studioを直接使用します.面倒くさい...(xamlはbamlリソースにコンパイルされ、最終的なdllまたはexeに埋め込まれる)