C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: クラスを引数で渡す方法


(過去ログ 169 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■97530 / inTopicNo.1)  クラスを引数で渡す方法
  
□投稿者/ ら (1回)-(2021/06/03(Thu) 09:16:45)

分類:[C#] 

引数でクラス型を渡すことはできますか?
メインフォームからサブフォームにクラス型の引数を渡したいのですが、渡そうとすると、
「アクセシビリティに一貫性がありません。」といったようなエラーが出てしまします。
どうにかクラスを渡すことはできないでしょうか?

コード例
// MainForm側
SubForm sub = new SubForm(class, string, string)

// SubForm側
public partial class PreviewForm : Form
{
public SubForm(class c, string s1, string s2)
{
// 処理等
}

引用返信 編集キー/
■97531 / inTopicNo.2)  Re[1]: クラスを引数で渡す方法
□投稿者/ 魔界の仮面弁士 (3114回)-(2021/06/03(Thu) 09:51:10)
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>();
引用返信 編集キー/
■97532 / inTopicNo.3)  Re[2]: クラスを引数で渡す方法
□投稿者/ ら (2回)-(2021/06/03(Thu) 11:03:07)
No97531 (魔界の仮面弁士 さん) に返信
2021/06/03(Thu) 09:52:28 編集(投稿者)

渡したいクラスをpublicにすることで解決することができました。
ご教授いただき大変助かりました。ありがとうございました。


引用返信 編集キー/
■97533 / inTopicNo.4)  Re[3]: クラスを引数で渡す方法
□投稿者/ ら (3回)-(2021/06/03(Thu) 11:03:38)
No97532 (ら さん) に返信
> ■No97531 (魔界の仮面弁士 さん) に返信
> 2021/06/03(Thu) 09:52:28 編集(投稿者)
>
> 渡したいクラスをpublicにすることで解決することができました。
> ご教授いただき大変助かりました。ありがとうございました。
>
>
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -