問題タブ [member-access]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1224 参照

c++ - C++ で別のクラスからクラス メンバー変数にアクセスする方法

次の 2 つのクラス ヘッダー ファイル (Ah と Bh) があり、それぞれに関数があります。

クラス A { public: double f(double); };

クラス B { public: double g(double); };

対応する cpp ファイルは次のとおりです。

「あ」を含む

「Bh」を含む

「あ」を含む

関数 g (B) 内で関数 f (A から) を使用したいと思います。どうすればいいですか?

0 投票する
1 に答える
144 参照

php - __get() および __set() メソッドの意味は何ですか

今日、MVC に関するチュートリアルを読みました。その男は、マジック メソッド (__get & __set()) を使用してプライベート メンバー値にアクセスしていました。(リンク) 最初は __get と __set が何をするのか混乱していましたが、インターネットを読んだ後、メンバーが外部からアクセスできない場合にこのメソッドが呼び出されることが最終的にわかりました。ここのところ...

しかし、次のようなコードを使用しても意味がありません。

私が推測する通常のゲッターとセッターを使用できます-そのIMOは理解しやすい方法です:

__get & __set を使用して外部のメンバーにアクセスしたい場合は、メンバーを公開することもできます。その意味がわかりません。これら2つの方法の意味を教えてください(おそらく例を挙げて)?

0 投票する
2 に答える
577 参照

c# - C# と MSIL の組み合わせ - JIT スキップ検証

次の MSIL メソッドを呼び出そうとしています。

ただし、次の行を実行しようとすると、次の例外が発生します。

メソッド呼び出し時に発生する「TypeAccessException」

はい、私は JIT 検証を認識していますが、多くのことを試しましたが、うまくいかなかったか、単に間違っていたのかもしれません。よくわかりません。また、この件についてはあまり見つけられませんでした。

私は次のことを試しました(それらのいくつかを組み合わせて):

  • [SecurityPermissionAttribute(SecurityAction.Demand, SkipVerification = true)]メソッドに属性を追加します (これもSecurityAction.Assert)
  • 通話new ReflectionPermission(ReflectionPermissionFlag.MemberAccess | ReflectionPermissionFlag.RestrictedMemberAccess).Demand();(および.Assert())
  • 通話new SecurityPermission(SecurityPermissionFlag.AllFlags).Demand();(および.Assert())

これらの要求と主張のいずれも、例外をスローしませんでした。

明確にするために、これは単なる例です。主なアイデアは、コードを機能させ、JIT の検証をバイパスすることです。この特定のメソッドは、C# ではリフレクションなしでは実行できず、非常にコストがかかるため避けたいのですが、それは重要ではありません。

JITがスローせずにこのコードを実行できる方法はありますか(パラメーターに渡した動的メソッドをコンストラクターにTypeAccessException呼び出す場合など)?trueskipVerification

0 投票する
3 に答える
158 参照

c# - カプセル化された親/子データ構造を書く簡単な方法は?

ときどき、「親」と「子」のデータ構造を書いていることがよくあります。

  • 親は、0 から N 個の異なる子への参照を持ちます。
  • 子は、0 親または 1 親への参照を持っています。
  • 参照は相互でなければなりません。特定の親に対して、それが参照するすべての子も、特定の親を参照する必要があります。特定の子について、それが参照する親は、特定の子を逆参照する必要があります。
  • privateリフレクションの使用は別として、2 つのクラス宣言の外部 (非) からアクセス可能なメンバーを使用して、上記の規則に違反することは不可能です。

このようなものを実装する前に取るかもしれない精神的なステップは、次のようなものから始まるかもしれません:

もちろん、これはコンパイルされませParent._childrenprivate。ただし、外部からのアクセスを許可したり、実装または他の場所でルールに違反しChildたりする可能性があるため、それを非公開にすることは望ましくありません。Parent

だから、私が思いついた解決策は、ネストChildすることParentです。ネストされたクラスは、ネストされたクラスのプライベート メンバーにアクセスできます。

私が尋ねている質問は、このアプローチよりも少ない、またはそれほど重要でない欠点を持つ同じ目標を達成する、これを書くための代替方法はありますか? このアプローチの主な欠点は次のとおりです。

  • これにより、スクリプトが大きくなる可能性がありますが、 を使用するとpartial役立ちます。
  • これにより、ネストが必要以上に深くなる可能性があります。
  • これにより、クラス名が冗長になる可能性があります。Childの外にアクセスするにはParent、 を使用する必要がありますParent.Child。クラス名が長い場合、特にジェネリックが使用されている場合、非常に醜いコードになる可能性があります。
  • ジェネリックを使用すると (たとえば、コンパイル時の型安全性を実現するため)、面倒になる可能性があります。Childこれは、が入れ子になっており、 とParent<T1>.Childは異なる型であるという事実に少なくとも部分的に起因しているように見えParent<T2>.Childます。型の安全性を相互にしたい場合、これはジェネリックの非常に醜い使用につながるか、ランタイム強制型の使用にフォールバックする必要があります。安全性 (ただし、通常は、たとえば、publicアクセサーが代わりにある非ジェネリック抽象ベースを使用して、カプセル化することができますprotected)。

friend余談ですが、これは、 を使用してアクセス権を拡張すると、これらの問題が簡単になる良い例かもしれません!

0 投票する
2 に答える
482 参照

c - ヘッダー ファイルの構造体メンバーにマクロ #define を使用すると、C コードをコンパイルできません

2 つのファイル (average.h、average.c) があります。構造体の定義で、私が使用し#ifdef INTERNALた .

average.c の内容は、

このコードをコンパイルしようとすると、 gcc -DINTERNAL -o average.exe average.c というエラー メッセージが表示されます。