前提・実現したいこと
C#でフォームアプリケーションを作成しています。
ユーザーコントロールの中にパネルを配置し、その中にさらにユーザーコントロールを配置するということをしております。
親コントロール(パネル)->子コントロール
という制御です。
この時の子コントロールから親コントロールを参照する時に出た疑問について質問いたします。
疑問点
以下の2つの違いについて教えていただきたいです。
①子コントロールのコンストラクタで親コントロールをthisを受け取る
②this.Parentで取得した親要素を親コントロールでキャストする
①については、
C#
1public class ParentControl : UserControl 2{ 3 public static ChildControl child; 4 public ParentControl() 5 { 6 child = new ChildControl(this); // 親要素をthisで渡す 7 panel.Controls.Add(parent); 8 } 9} 10 11public class ChildControl : UserControl 12{ 13 public static ParentControl parent; 14 public ChildControl(ParentControl _parent) 15 { 16 parent = _parent; // 子要素で親要素を受け取る 17 } 18}
②については、
C#
1public class ParentControl : UserControl 2{ 3 public static ChildControl child; 4 public ParentControl() 5 { 6 child = new ChildControl(); 7 } 8} 9 10public class ChildControl : UserControl 11{ 12 public static ParentControl parent; 13 public ChildControl() 14 { 15 parent = (ParentControl)this.Parent; // 親要素を取得しParentControlでキャスト 16 } 17}
というソースになります。(簡略化してあります)
①の場合はエラーが発生せずにうまく処理でき、
②の場合はハンドルされてないエラーでアプリケーションが落ちます。
これら2つの違いはいったい何でしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/16 07:33
2018/07/16 07:44
2018/07/16 07:54
2018/07/16 09:18
2018/07/16 12:07
2018/07/16 14:54
2018/07/17 01:43