私は私の質問への答えを探して、そして運がないところで、ここ数日間インターネットのいたるところにいました。列挙型と定数、それはどのように機能しますか?
私は、プログラムでの定数の役割と、それらがクラスでどのように参照されているかを理解しようとしています。
IはScintillaのソースコードを見てきた、そのように複数の値があることを見てきた:
public const int SC_WRAP_NONE = 0;
public const int SC_WRAP_WORD = 1;
public const int SC_WRAP_CHAR = 2;
public const int SC_WRAP_WHITESPACE = 3;
これらはNativeMethods.csファイル(here)に配置されています。
これらのうちのいくつかが列挙型であることを説明するドキュメント(here)が見つかりました。前述の例は、単語の折り返し(単語、文字、または空白で囲む)の列挙です。
しかし、そのように定義されたいくつかの定数があります:彼らは列挙型として使用する
public const int SCI_START = 2000;
public const int SCI_OPTIONAL_START = 3000;
public const int SCI_LEXER_START = 4000;
public const int SCI_ADDTEXT = 2001;
public const int SCI_ADDSTYLEDTEXT = 2002;
public const int SCI_INSERTTEXT = 2003;
public const int SCI_CHANGEINSERTION = 2672;
public const int SCI_CLEARALL = 2004;
public const int SCI_DELETERANGE = 2645;
public const int SCI_CLEARDOCUMENTSTYLE = 2005;
//
// ... list continues
//
public const int SCI_SETWRAPINDENTMODE = 2472;
public const int SCI_GETWRAPINDENTMODE = 2473;
場合、それらは2000
から始まり、なぜ、私は疑問に思って。
それだけでなく、(例としてSCI_SETWRAPINDENTMODE
とSCI_GETWRAPINDENTMODE
定数を取るクラス内の実装では、値がそのように同様に使用されている:
public WrapIndentMode WrapIndentMode
{
get
{
return (WrapIndentMode)DirectMessage(NativeMethods.SCI_GETWRAPINDENTMODE);
}
set
{
var wrapIndentMode = (int)value;
DirectMessage(NativeMethods.SCI_SETWRAPINDENTMODE, new IntPtr(wrapIndentMode));
}
}
これらの値は、(DirectMessage
関数を使用してScintillaのに送られしかし、私が把握しようとしていることは、アプリケーションが列挙型の値を受け取って(この場合)テキストを折り返す方法です。.dll
ファイルと何か関係がありますか?
私のクエスト
- なぜいくつかの列挙型は、そのような大きな参照(> 2000)で始まるのですか?
- アプリケーションは、希望の出力を実行するために値をどうするかをどのように知っていますか?
- 最も重要なことに、列挙型の値を送信することによって実行できる独自の関数を作成するにはどうすればよいのですか?また、プログラムはMY列挙型の値をどのように処理するのかを知っていますか?
可能であれば、私は誰かが私にこのステップを一歩一歩踏み外し、ここで起こっていることの一般的なプロセスについて説明したいと思います。
現在、私は、enum値がメソッドを呼び出す.dll
ファイルに送信されているように感じていますが、私は方法が間違っている可能性があります。
お返事いただきありがとうございます。今は私には分かりやすいものです。 – JMad