C#における関数を使ったコンテキストの作成方法|メニューの作り方など

- システム
エンジニア - コンテキストメニューについて詳しく教えてください。
- プロジェクト
マネージャー - ここではC#のコンテキストメニューについて詳しく見ていきましょう。
コンテキストとは?
マウスを右クリックする際に現れるボックスがコンテキストメニューです。標準タイプのコンテキストメニューは既に備わっていますが、ご自身で作成するも可能です。今回はC#を使ったコンテキストメニューの作り方を含め、ご紹介します。
C#のコンテキストメニューの作成方法5選
コンテキストメニューは標準搭載されていますが、ご自身で作成する事も出来ますし、非表示にしたり、左クリックで表示する様に変更したり出来ます。
ご自身でどういうコンテキストメニューを表示させるかで標準搭載されているものを使うか自作するかを選んでください。
1:標準のコンテキストメニュー
TextBoxではデフォルトでコンテキストメニューが表示されます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
TextBox textBox;
public Form1()
{
textBox = new TextBox();
textBox.Location = new Point(10, 10);
textBox.Multiline = true;
textBox.Height = 100;
this.Text = "Form1";
this.Controls.Add(textBox);
this.Load += new EventHandler(Form1_Load);
}
private void Form1_Load(object sender, EventArgs e)
{
//
}
}
}
|
TextBox上で右クリックするとコンテキストメニューが表示され、コンテキストメニューからのコピーや貼り付けなどが行えます。また、Ctrl-CやCtrl-Vも使用できます。
2:コンテキストメニューの非表示
C#では、ShortcutsEnabledプロパティをfalseにすると、コンテキストメニューを非表示にできます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
TextBox textBox;
public Form1()
{
textBox = new TextBox();
textBox.Location = new Point(10, 10);
textBox.Multiline = true;
textBox.Height = 100;
this.Text = "Form1";
this.Controls.Add(textBox);
this.Load += new EventHandler(Form1_Load);
}
private void Form1_Load(object sender, EventArgs e)
{
// コンテキストメニューを非表示にする
textBox.ShortcutsEnabled = false;
}
}
}
|
C#では空のコンテキストメニューを設定することで、コンテキストメニューを非表示にできます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
TextBox textBox;
public Form1()
{
textBox = new TextBox();
textBox.Location = new Point(10, 10);
textBox.Multiline = true;
textBox.Height = 100;
this.Text = "Form1";
this.Controls.Add(textBox);
this.Load += new EventHandler(Form1_Load);
}
private void Form1_Load(object sender, EventArgs e)
{
// コンテキストメニューを非表示にする
textBox.ContextMenu = new ContextMenu();
}
}
}
|
コンテキストメニューが表示されないことが分かります。この場合、Ctrl-CやCtrl-Vは使用できます。
3:自作のコンテキストメニュー(ContextMenu)
C#では、ContextMenuコントロールを使用すれば、コンテキストメニューを自作できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
TextBox textBox;
ContextMenu contextMenu;
MenuItem menuItem1, menuItem2, menuItem3;
public Form1()
{
textBox = new TextBox();
textBox.Location = new Point(10, 10);
textBox.Multiline = true;
textBox.Height = 100;
menuItem1 = new MenuItem();
menuItem1.Index = 0;
menuItem1.Text = "menu1";
menuItem2 = new MenuItem();
menuItem2.Index = 0;
menuItem2.Text = "menu2";
menuItem3 = new MenuItem();
menuItem3.Index = 0;
menuItem3.Text = "menu3";
contextMenu = new ContextMenu();
contextMenu.MenuItems.Add(menuItem1);
contextMenu.MenuItems.Add(menuItem2);
contextMenu.MenuItems.Add(menuItem3);
textBox.ContextMenu = contextMenu;
this.Text = "Form1";
this.Controls.Add(textBox);
this.Load += new EventHandler(Form1_Load);
menuItem1.Click += new EventHandler(MenuItem1_Click);
menuItem2.Click += new EventHandler(MenuItem2_Click);
menuItem3.Click += new EventHandler(MenuItem3_Click);
}
private void Form1_Load(object sender, EventArgs e)
{
//
}
private void MenuItem1_Click(object sender, EventArgs e)
{
Console.WriteLine("menu1");
}
private void MenuItem2_Click(object sender, EventArgs e)
{
Console.WriteLine("menu2");
}
private void MenuItem3_Click(object sender, EventArgs e)
{
Console.WriteLine("menu3");
}
}
}
|
4:自作のコンテキストメニュー(ContextMenuStrip)
ContextMenuStripコントロールは、ContextMenuコントロールの後継バージョンです。ContextMenuコントロール以上の機能を提供します。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
TextBox textBox;
ContextMenuStrip contextMenuStrip;
ToolStripMenuItem menuItem, menuItem1, menuItem2, menuItem3;
public Form1()
{
textBox = new TextBox();
textBox.Location = new Point(10, 10);
textBox.Multiline = true;
textBox.Height = 100;
menuItem = new ToolStripMenuItem();
menuItem.Text = "menu";
menuItem1 = new ToolStripMenuItem();
menuItem1.Text = "menu1";
menuItem2 = new ToolStripMenuItem();
menuItem2.Text = "menu2";
menuItem3 = new ToolStripMenuItem();
menuItem3.Text = "menu3";
// 多階層のコンテキストメニューにする
menuItem.DropDownItems.Add(menuItem1);
menuItem.DropDownItems.Add(menuItem2);
menuItem.DropDownItems.Add(menuItem3);
contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.Add(menuItem);
textBox.ContextMenuStrip = contextMenuStrip;
this.Text = "Form1";
this.Controls.Add(textBox);
this.Load += new EventHandler(Form1_Load);
menuItem1.Click += new EventHandler(MenuItem1_Click);
menuItem2.Click += new EventHandler(MenuItem2_Click);
menuItem3.Click += new EventHandler(MenuItem3_Click);
}
private void Form1_Load(object sender, EventArgs e)
{
//
}
private void MenuItem1_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
private void MenuItem2_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
private void MenuItem3_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
TextBox textBox;
ContextMenuStrip contextMenuStrip;
ToolStripMenuItem menuItem, menuItem1, menuItem2, menuItem3;
public Form1()
{
textBox = new TextBox();
textBox.Location = new Point(10, 10);
textBox.Multiline = true;
textBox.Height = 100;
menuItem = new ToolStripMenuItem();
menuItem.Text = "menu";
menuItem1 = new ToolStripMenuItem();
menuItem1.Text = "menu1";
menuItem2 = new ToolStripMenuItem();
menuItem2.Text = "menu2";
menuItem3 = new ToolStripMenuItem();
menuItem3.Text = "menu3";
// 多階層のコンテキストメニューにする
menuItem.DropDownItems.Add(menuItem1);
menuItem.DropDownItems.Add(menuItem2);
menuItem.DropDownItems.Add(menuItem3);
contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.Add(menuItem);
textBox.ContextMenuStrip = contextMenuStrip;
this.Text = "Form1";
this.Controls.Add(textBox);
this.Load += new EventHandler(Form1_Load);
menuItem1.Click += new EventHandler(MenuItem1_Click);
menuItem2.Click += new EventHandler(MenuItem2_Click);
menuItem3.Click += new EventHandler(MenuItem3_Click);
}
private void Form1_Load(object sender, EventArgs e)
{
//
}
private void MenuItem1_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
private void MenuItem2_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
private void MenuItem3_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
}
}
|
5:左クリックでコンテキストメニュー表示
C#では、MouseClickのイベントハンドラを利用すれば、左クリックでコンテキストメニューを表示できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
TextBox textBox;
ContextMenuStrip contextMenuStrip;
ToolStripMenuItem menuItem, menuItem1, menuItem2, menuItem3;
public Form1()
{
textBox = new TextBox();
textBox.Location = new Point(10, 10);
textBox.Multiline = true;
textBox.Height = 100;
menuItem = new ToolStripMenuItem();
menuItem.Text = "menu";
menuItem1 = new ToolStripMenuItem();
menuItem1.Text = "menu1";
menuItem2 = new ToolStripMenuItem();
menuItem2.Text = "menu2";
menuItem3 = new ToolStripMenuItem();
menuItem3.Text = "menu3";
// 2段階のコンテキストメニューにする
menuItem.DropDownItems.Add(menuItem1);
menuItem.DropDownItems.Add(menuItem2);
menuItem.DropDownItems.Add(menuItem3);
contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.Add(menuItem);
textBox.ContextMenuStrip = contextMenuStrip;
this.Text = "Form1";
this.Controls.Add(textBox);
this.Load += new EventHandler(Form1_Load);
menuItem1.Click += new EventHandler(MenuItem1_Click);
menuItem2.Click += new EventHandler(MenuItem2_Click);
menuItem3.Click += new EventHandler(MenuItem3_Click);
textBox.MouseClick += new MouseEventHandler(TextBox_MouseClick);
}
private void TextBox_MouseClick(object sender, MouseEventArgs e)
{
// 左クリックでコンテキストメニュー表示
Point cp = textBox.PointToScreen(e.Location);
contextMenuStrip.Show(cp.X, cp.Y);
}
private void Form1_Load(object sender, EventArgs e)
{
//
}
private void MenuItem1_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
private void MenuItem2_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
private void MenuItem3_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
}
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
TextBox textBox;
ContextMenuStrip contextMenuStrip;
ToolStripMenuItem menuItem, menuItem1, menuItem2, menuItem3;
public Form1()
{
textBox = new TextBox();
textBox.Location = new Point(10, 10);
textBox.Multiline = true;
textBox.Height = 100;
menuItem = new ToolStripMenuItem();
menuItem.Text = "menu";
menuItem1 = new ToolStripMenuItem();
menuItem1.Text = "menu1";
menuItem2 = new ToolStripMenuItem();
menuItem2.Text = "menu2";
menuItem3 = new ToolStripMenuItem();
menuItem3.Text = "menu3";
// 2段階のコンテキストメニューにする
menuItem.DropDownItems.Add(menuItem1);
menuItem.DropDownItems.Add(menuItem2);
menuItem.DropDownItems.Add(menuItem3);
contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.Add(menuItem);
textBox.ContextMenuStrip = contextMenuStrip;
this.Text = "Form1";
this.Controls.Add(textBox);
this.Load += new EventHandler(Form1_Load);
menuItem1.Click += new EventHandler(MenuItem1_Click);
menuItem2.Click += new EventHandler(MenuItem2_Click);
menuItem3.Click += new EventHandler(MenuItem3_Click);
textBox.MouseClick += new MouseEventHandler(TextBox_MouseClick);
}
private void TextBox_MouseClick(object sender, MouseEventArgs e)
{
// 左クリックでコンテキストメニュー表示
Point cp = textBox.PointToScreen(e.Location);
contextMenuStrip.Show(cp.X, cp.Y);
}
private void Form1_Load(object sender, EventArgs e)
{
//
}
private void MenuItem1_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
private void MenuItem2_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
private void MenuItem3_Click(object sender, EventArgs e)
{
// チェックを反転する
ToolStripMenuItem item = (ToolStripMenuItem)sender;
item.Checked = !item.Checked;
}
}
}
|
このように、C#ではMouseClickのイベントハンドラを利用すれば、左クリックでコンテキストメニューを表示できます。
コンテキストキーワードを使用して特定の意味を付与する20の方法
C#ではaddやyieldなど様々なデータ型を使うことができ、外部からオブジェクトにアクセス出来たり特定の値のみを抽出したりする事が出来ます。ここで紹介する20のデータ型を活用し、コンテキスト作成に役立てて下さい。
1:andの使い方
このコンテキストキーワードは、C#においてnullとnotの両方が式に一致する場合はandを使って組み合わせる事が出来ます。
以下のコードでは、関連性のあるパターンを合体させる事で、値が-40から20という指定した領域内に入っているかを確認させ、値によって指定されて文字を出力させています。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Console.WriteLine(Classify(13)); // output: High
Console.WriteLine(Classify(-100)); // output: Too low
Console.WriteLine(Classify(5.7)); // output: Acceptable
static string Classify(double measurement) => measurement switch
{
< -40.0 => "Too low",
>= -40.0 and < 0 => "Low",
>= 0 and < 10.0 => "Acceptable",
>= 10.0 and < 20.0 => "High",
>= 20.0 => "Too high",
double.NaN => "Unknown",
};
|
2:addの使い方
addは、外部からオブジェクト内にある変数にアクセスする際に必要なオブジェクト指向が高いC#のコンテキストキーワードの1つです。addは指示した内容通りにプログラムが実行される際に、双方向のデータを同期させたい場合に利用されます。
1
2
3
4
5
6
7
8
9
10
|
class Events : IDrawingObject
{
event EventHandler PreDrawEvent;
event EventHandler IDrawingObject.OnDraw
{
add => PreDrawEvent += value;
remove => PreDrawEvent -= value;
}
}
|
3:asyncの使い方
asyncはC#の修飾子の1つで、メソッドまたは式を同期させたくない場合に使用されるコンテキストキーワードです。「非同期メソッド」としても有名で、以下のコードではExampleMethodAsync というメソッドを同期させない様にしています。
1
2
3
|
public async Task<int> ExampleMethodAsync()
{
}
|
4:getの使い方
getを使う事で、プログラム処理に欠かせないメソッドや値、構文の結果を出力させる事が出来ます。以下のコードでは、getを使ってSecondsプロパティの値を返しています。
1
2
3
4
5
6
7
8
9
|
class TimePeriod
{
private double _seconds;
public double Seconds
{
get { return _seconds; }
set { _seconds = value; }
}
|
5:awaitの使い方
await 演算子は、値や変数が非同期的な処理を終えるまで、外側にあるメソッドの処理が行われない様にする事が出来るC#のコンテキストキーワードです。 処理が完了された後は、メソッドによる操作の結果が出力されます。
以下のコードでは、非同期操作が完了した後にバイト配列が作成される様にプログラミングされています。 awaitは非同期処理が完了されるまで、Async メソッドの実行を抑制する事が出来ます。
1
2
3
4
5
6
7
8
9
10
|
public class AwaitOperator
{
public static async Task Main()
{
Task<int> downloading = DownloadDocsMainPageAsync();
Console.WriteLine($"{nameof(Main)}: Launched downloading.");
int bytesLoaded = await downloading;
Console.WriteLine($"{nameof(Main)}: Downloaded {bytesLoaded} bytes.");
}?
|
6:initの使い方
initはプロパティ内やインデクサー内の値や構文などに外部からアクセス出来るC#のコンテキストキーワードです。 オブジェクトの作成している、プロパティまたはインデクサー要素に値を割り振れます。
以下の構文では、Seconds というプロパティに getとinitを割り振り、外部からでもこのプロパティにアクセス出来る様にしています。
1
2
3
4
5
6
7
8
9
10
|
class InitExample
{
private double _seconds;
public double Seconds
{
get { return _seconds; }
init { _seconds = value; }
}
}
|
7:dynamicの使い方
dynamic 型は、ある変数を宣言する際に並列して記述する事で働きを持つメソッドを連携させられる動的型付け変数の事です。 代わりに、演算は実行時に解決されます。 これにより、動的APIやHTML ドキュメントオブジェクトモデルにアクセスしやすくなり操作が楽になります。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Program
{
static void Main(string[] args)
{
dynamic dyn = 1;
object obj = 1;
// Rest the mouse pointer over dyn and obj to see their
// types at compile time.
System.Console.WriteLine(dyn.GetType());
System.Console.WriteLine(obj.GetType());
}
}
|
8:notの使い方
否定されたパターンが式に一致しない事を感知出来るC#のコンテキストキーワードです。 以下のコードでは、入力された式の中身がnullでないかどうかをチェックしています。
1
2
3
|
if (input is not null)
{
}
|
9:nintの使い方
このコンテキストキーワードは、C#内でSystem.UIntPtr として示されている整数の値を、nintによって出力に適する様に値の演算と変換を行います。
1
2
|
nint a = 1;
System.IntPtr a = 1;
|
10:globalの使い方
globalはC#の演算子の1つであり、NETのSystem 名前空間によって定義されたエイリアスが、他の名前空間やクラスを修飾する事が出来るコンテキストキーワードです。 これにより、任意の名前空間内に新規のエイリアスを作成する事が出来ます。
1
2
3
4
5
6
7
8
9
10
11
12
|
namespace MyCompany.MyProduct.System
{
class Program
{
static void Main() => global::System.Console.WriteLine("Using global alias");
}
class Console
{
string Suggestion => "Consider renaming this class";
}
}
|
11:partialの使い方
C#において、partialはクラスやインターフェイスなどを複数のファイルに分割することが出来るコンテキストキーワードの事です。以下のコードでは、Aというクラスをいくつかのファイルに分割しています。
1
2
3
4
5
6
7
8
9
|
namespace PC
{
partial class A
{
int num = 0;
void MethodA() { }
partial void MethodC();
}
}
|
12:nuintの使い方
nuintは、C#においてプログラムを稼働させるビットプロセスに合わせた整数型を出力させる事が出来るコンテキストキーワードです。 特に、整数演算を主とするプログラムにおいて使用すると、パフォーマンスを最適化させられます。
注意点としては、C#では以下のコードの様に整数型を取得する為にはsizeof()を使う必要があるという事です。
1
2
|
Console.WriteLine($"size of nint = {sizeof(nint)}");
Console.WriteLine($"size of nuint = {sizeof(nuint)}");
|
13:removeの使い方
removeは、addと同様に外部からオブジェクト内に含まれている変数にアクセスする際に必要なC#のコンテキストキーワードです。ただし、addと違う点は、外部ユーザーがプログラムへのアクセスを解除する際に活躍します。
removeとaddとは働きが非常に似ているという事もあり、C#ではremoveを稼働させたい時は以下のコードの様にaddも使う必要があります。
1
2
3
4
5
6
7
8
9
10
|
class Events : IDrawingObject
{
event EventHandler PreDrawEvent;
event EventHandler IDrawingObject.OnDraw
{
add => PreDrawEvent += value;
remove => PreDrawEvent -= value;
}
}
|
14:recordの使い方
recordは、2つのオブジェクトが同じ値を持っているかを検証する為のC#のコンテキストキーワードであり、classと非常に似た働きをします。 C#では、record型を作成する際に、位置指定パラメーターまたは標準のプロパティ構文を使う事が出来ます。
1
|
public record Person(string FirstName, string LastName);
|
15:valueの使い方
value は、プロパティ及びインデクサー内でsetを宣言する際に用いられるC#のコンテキストキーワードです。 C#ではvalue に値を格納させ、更にその値をプロパティまたはインデクサーに割り当てる事も可能です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class MyBaseClass
{
// virtual auto-implemented property. Overrides can only
// provide specialized behavior if they implement get and set accessors.
public virtual string Name { get; set; }
// ordinary virtual property with backing field
private int num;
public virtual int Number
{
get { return num; }
set { num = value; }
}
}
|
16:setの使い方
setは、格納された値をプロパティまたはインデクサーに割り振る際に活用出来るC#のコンテキストキーワードです。以下の構文では、get及びsetを使ってSecondsプロパティに値を割り振っています。
1
2
3
4
5
6
7
8
9
10
|
class TimePeriod
{
private double _seconds;
public double Seconds
{
get { return _seconds; }
set { _seconds = value; }
}
}
|
17:whenの使い方
whenは、catchなどのステートメントと共に使う事でフィルター条件を設定する事が出来るC#のコンテキストキーワードです。以下のコードでは、catchステートメントで特定の例外のハンドラーを実行することでtrueの条件のみを抽出する事が出来ます。
1
|
catch (ExceptionType [e]) when (expr)
|
18:varの使い方
Varは、指定される事によってデータ方を推測し、コンパイラに出力することが出来るC#のコンテキストキーワードで、この状態を暗黙的にローカル変数を型指定していると言います。また、以下のコードの様に暗黙的な型指定でも厳格な型指定でも両者の機能は同じになります。
1
2
|
var i = 10; // Implicitly typed.
int i = 10; // Explicitly typed.
|
19:yieldの使い方
yieldは、C#においてIEnumerator またはIEnumerableの値を返す場合に用いられます。また、yieldを使うとメソッドや演算子等に対して同じ操作を繰り返し行う事が出来ます。更に、C#では 以下のコードの様にIEnumeratorを省略する事も可能です。
1
2
|
yield return <expression>;
yield break;
|
20:whereの使い方
whereでは、配列内に格納されている数値の中から奇数だけを抽出するなど、フィルターを設けたい際に役立つC#のコンテキストキーワードです。
以下のコードでは、Aクラス内のデータをフィルタリングするのか否かをしっかりと定義した上で、返し値を戻すかも指定しています。
1
2
3
4
|
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate)
|
C#のコンテキストにおけるコマンドキューとは?
C#のコンテキストにおけるコマンドキューとは、GPUにあるバッファー上のデータを書き直したり計算したりする事が出来るオブジェクトの1種です。更にC#ではメソッドがカプセル化された状態でGPUを操作出来ます。
コマンドキューの生成方法
clCreateCommandQueue関数を使用する事で、C#においてデバイスとコンテキストからコマンドキューを生成する事が出来ます。
1
2
3
4
5
6
|
cl_command_queue clCreateCommandQueue(
cl_context context,
cl_device_id device,
cl_command_queue_properties properties,
cl_int *errcode_ret
)
|
コマンドキューの破棄方法
C#ではコマンドキューを使い終えて破棄する際には、clReleaseCommanndQueue関数を使用します。関数によって参照カウントを段々と減らしていき、0になったら破棄するという仕組みになっています。
1
2
3
|
cl_int clReleaseCommandQueue(
cl_command_queue command_queue
)?
|
- システム
エンジニア - コンテキストメニューは自作もできるのですね。
- プロジェクト
マネージャー - 実際のソースコードを参考にして自作し、より理解を深めていきましょう。
C#の様々なコンテキストを作成してみよう
C#では、コンテキストメニューは表示させなくしたり自分で作成する事も出来ます。また、C#では様々なデータ型が存在するので自由自在に指示を出す事が出来ます。
更に、パッケージ化されたオブジェクト型「コマンドキュー」を作成すればGPU内の編集も可能です。是非様々なコンテキストを作成してみて下さい。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)