50571


C#のMain()関数の`(string[] args)`とはどのような意味なのでしょうか？  
C言語等でも`int main(void){}`(void)などありますが、  
意味を教えてくれますでしょうか？

[code]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    class Program
    {
    
        static void Main(string[] args)
        {
    
    
            Console.ReadKey();
        }
    }
    
[/code]


CC BY-SA 4.0
2018-11-23T08:38:44.937
50569
2018-12-10T02:35:55.340
2018-12-07T15:45:08.133
2238
question
c#
C#のstatic Main()の引数の意味が知りたい。


マニュアルを読みましょう。  
<https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/main-and-
command-args/>  
あるいは Visual Studio のインストールされているディレクトリ中の仕様書

[c#](/questions/tagged/c%23 "'c#' のタグが付いた質問を表示") の `Main` は `Main(void)` ないしは
`Main(string[] args)`
のどちらかを選ぶことができて、後者の場合「コマンドライン引数」を受け取ることができます。前者の場合はコマンドライン引数が指定されていても受け取れません。

[code]

    C>myprog foo bar baz
    
[/code]

ここでは `myprog.exe` をコマンドライン引数付きで起動していますが、このとき  
\- `args[0]` には `foo`  
\- `args[1]` には `bar`  
\- `args[2]` には `baz`  
が格納されます。（仮引数指定なしの `Main()` では受け取れません）

[c](/questions/tagged/c "'c' のタグが付いた質問を表示") の場合は `argv[0]` にはプログラム名が入りますが
[c#](/questions/tagged/c%23 "'c#' のタグが付いた質問を表示") の場合はプログラム名は `args`
に入っていませんので要注意。 (`System.Environment.GetCommandLineArgs()[0]` とかを使う必要がある)

GUI プログラムであってもエクスプローラー上の EXE
アイコンにデータファイルをドラッグドロップする場合などにコマンドライン引数が使われるので、今でも使う機会は結構あります。


CC BY-SA 4.0
2018-11-23T11:20:22.100
50571
2018-12-10T02:35:55.340
2018-12-10T02:35:55.340
8589
8589
50569
answer


windowsができる前のPCのOSはMSDOSというOSでした。  
このOSは今のマウス操作で行うGUIではなく、コマンド入力でプログラムを起動していました。  
現在のwindowsでもこの機能は残っており、スタートメニューを右クリックし、Windows PowerShellを  
選択すればコマンド入力状態になります。  
コマンドはプログラム名 引数1 引数2...のようなフォーマットで入力します。  
例えばファイルのリネームの場合、rename 対象のファイル名 新しいファイル名  
のように入力します。  
この引数を受け取るための機能がstring[] argsになります。  
現在のGUIのプログラムではあまり必要では無いかもしれませんが、状況により  
起動時に動作を変えたい場合などに使えたりします。  
GUIのプログラムでマウスクリックで使用する場合は、プログラムのショートカットを作成し、  
引数を設定することができます。  
複数のショートカットを作成し、引数を変えることにより、起動時に動作を変えることができます。


CC BY-SA 4.0
2018-12-08T05:53:20.580
51024
2018-12-08T05:53:20.580
24490
50569
answer