|
2021/06/03(Thu) 09:52:28 編集(投稿者)
■No97530 (ら さん) に返信 > 「アクセシビリティに一貫性がありません。」といったようなエラーが出てしまします。
private や internal といった狭いスコープの型(enum / struct / class / record)を より広いスコープ (public など)なメンバーの引数や戻り値として利用しているのでは無いでしょうか。
public class Program { private class Narrow { } public class Wide { }
// これは OK public void Method1(Wide w) { }
// エラー CS0051 public void Method2(Narrow n) { }
static void Main() { } }
> public SubForm(class c, string s1, string s2)
class や string は予約語です。 列挙型/構造体/クラスなどの型名に使うことはできません。
どうしても必要なら、先頭に @ を付けて宣言すれば キーワードも識別子名として使えるようになります。 ※ class X {} と class @X {} は同義です。
public class @class { } public enum @string { } public class SubForm { public SubForm(@class c, @string s1, @string s2) { } }
> SubForm sub = new SubForm(class, string, string)
class や string は予約語です。 型名と同様、変数名や仮引数名にも使えません。
どうしてもその名を使いたいのであれば、 bool @class = true; int @string = 0; SubForm sub = new SubForm(@class, @string, @string); のように先頭に @ を付けてエスケープ表記する必要があります。
> 引数でクラス型を渡すことはできますか?
質問の意味が良く分かりませんが、 インスタンスを渡すこともできますし、 型そのものを渡すこともできます。
// 引数で string クラスのインスタンスを渡す var s = "test"; Console.WriteLine(s);
// DayOfWeek 型を表す Type クラスのインスタンスを引数で渡す var ary = Enum.GetValues(typeof(DayOfWeek));
// ジェネリック クラスの 型引数に Program クラスの型を渡す var list = new List<Program>();
|