質問編集履歴

1

達成したいこと (基底・派生クラスで定義したenumをインスタンスを使って指定したい)旨を追記。

2021/04/21 02:28

投稿

Taffy
Taffy

スコア33

test CHANGED
File without changes
test CHANGED
@@ -67,3 +67,139 @@
67
67
  Defineクラス内部で 2つ以上の基底クラスを継承させ
68
68
 
69
69
  enum型の定義をそれぞれから呼び出して書き換えることはできないでしょうか?
70
+
71
+
72
+
73
+ ---------------------------------------------------------------------------------------
74
+
75
+
76
+
77
+ 補足 やりたいことのイメージですが、下記にサンプルコードを示します。
78
+
79
+    基底クラス Person を作り、派生クラス Employeeを作ります。
80
+
81
+    それぞれのクラスで Season という 同名の enum を用意します。
82
+
83
+
84
+
85
+    各クラス内部で それぞれに作成したSeason を使うことはできるのですが、
86
+
87
+    基底クラス・派生クラスの 呼び出し元で インスタンスを使って Seasonを指定することができないとわかりました。
88
+
89
+
90
+
91
+    上記のような実装をしたい場合の解決案について教えていただけないでしょうか。
92
+
93
+
94
+
95
+    
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+ ```C#
104
+
105
+ public partial class Form1 : Form // 実際の開発では、Defineクラス で使用する予定
106
+
107
+ {
108
+
109
+ public Form1()
110
+
111
+ {
112
+
113
+ InitializeComponent();
114
+
115
+ }
116
+
117
+
118
+
119
+ private void btn_Click(object sender, EventArgs e)
120
+
121
+ {
122
+
123
+ Button btn = (Button)sender;
124
+
125
+
126
+
127
+ Person p;
128
+
129
+
130
+
131
+ if (btn.Name == "button1")
132
+
133
+ {
134
+
135
+ textBox1.Text = ((int)Person.Season.Max).ToString(); // ここでクラス名を指定しなければならない
136
+
137
+ }
138
+
139
+ else
140
+
141
+ {
142
+
143
+ textBox1.Text = ((int)Employee.Season.Max).ToString();// 同上
144
+
145
+ }
146
+
147
+   }
148
+
149
+ }
150
+
151
+
152
+
153
+ class Person //基底クラス
154
+
155
+ {
156
+
157
+ public enum Season
158
+
159
+ {
160
+
161
+ Spring,
162
+
163
+ Summer,
164
+
165
+ Autumn,
166
+
167
+ Winter,
168
+
169
+ Max
170
+
171
+ }
172
+
173
+ }
174
+
175
+
176
+
177
+ partial class Employee : Person // 派生クラス
178
+
179
+ {
180
+
181
+ string syumi;
182
+
183
+ string[] strSeason = { "春", "夏", "秋", "冬" };
184
+
185
+
186
+
187
+ public new enum Season // 派生クラスのenumは明示的にnewを付ける(うっかり継承先に同名メソッドを記述していないことを明記)
188
+
189
+ {
190
+
191
+ Spring,
192
+
193
+ Summer,
194
+
195
+ Autumn,
196
+
197
+ Winter,
198
+
199
+ Max = Spring + 1
200
+
201
+ }
202
+
203
+ }
204
+
205
+ ```