VB.Netのアクセス修飾子について私が理解できない問題が発生しました。私はクラスがFriendと宣言しました。プロパティPublicを宣言すると、アプリケーションが動作します。私がFriendを宣言すると、アプリケーションは失敗します。クラスとメンバーのアクセスが異なる場合の動作を説明してください。
これまで、Friendと宣言されたクラスでは、メンバーをPublicまたはFriendとして宣言しても、機能的な違いはないと私は信じていました。私は、クラスアクセス宣言がすべてのネストしたエンティティにその制限を適用したと考えたので、Public宣言されたネストされたプロパティは、Friendとして宣言されたように効果的に制限されていました。明らかに、私は間違っていた。アクセス修飾子が実際にどのように機能するか、または関連するドキュメントを私に指摘する人は誰でも説明できますか?
状況の詳細を以下に示します。StripDate、HistorianDate、TaskTextという名前のStripTaskというFriendクラスがあります。 Syncfusion GridDataBoundGridのデータソースとして使用されるStripTasks(_StripTasks)のコレクションがあります。バインドの仕方によって、StripTaskプロパティの名前を各グリッド列に渡して、各列がどのデータを表示するかを知る必要があります。これは、次のようなものになります。_DataBoundGrid.GridBoundColumns(1).MappingName = "StripDate"マップされたプロパティがPublicに宣言されると、それは機能します。マップされたプロパティがFriendとして宣言されると、グリッドには正しい行数が設定されますが、すべてのセルは空です。
フォローアップの質問として、私は文字列としてプロパティ名を渡す必要があるこのSyncfusionバインディングメソッドのようなものを避けることをお勧めしますか?あたかもトラブルを招いているかのように感じます。
Chris、返信いただきありがとうございます。残念ながら、私はまだ混乱しています。クラスのアクセスレベルがメンバーに流れ込まないと言うと、アセンブリの外部からアクセスできないフレンドクラスにアセンブリの外部からアクセス可能なパブリックメソッドがあると言っていますか?実際の問題として、この行動はいつ、どのように使用されますか?私はコードを試していましたが、アセンブリ外からFriendクラスのPublicメンバを参照するためのVB.Net構文は見つかりませんでした。 – Todd
@Todd、正直言って私もそれを考えなければならなかった。私は非常にまれに「友達」を使っているので、これを書いて実際に私を助けました! –
クリス、あなたは素晴らしいです!そのコードサンプルは概念を完全に説明しています。ネストされたプロパティとメソッドのアクセス宣言がなぜ重要であるかを理解しました。 私は反射を理解していなかったので、私の元の誤解が存在したことがわかりました。私の限られた経験の中で、リフレクションは予期しない失敗につながり、Visual Studioのコードチェック機能をバイパスし、難読化を複雑にし、本当に必要なことではありません。その理由から、私は可能な限り反射を避けるべきであるという結論に達しました。それは合理的な結論ですか? – Todd