- PR -

クラスの変更をせずにオブジェクトのコピー

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-04-25 11:28
引用:

KT工房さんの書き込み (2008-04-25 09:55) より:

不本意ですが、コピーする予定だったクラスを継承したプライベートなクラスを作成して目的を達成することにします。


これではアクセスできないメンバが出てきてしまう点は結局解決できないような気がします。 どう目的を達成するのでしょうか? それとも全メンバが奇跡的に Protected だったのでしょうか?

引用:

追加で影響を及ぼすことは無いのは私も同意見なのですが、なかなか難しいです・・・。


興味があるためお聞きしますが 「難しい」 の根拠はなんでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KT工房
常連さん
会議室デビュー日: 2006/06/20
投稿数: 49
投稿日時: 2008-04-25 14:51
引用:
興味があるためお聞きしますが 「難しい」 の根拠はなんでしょうか?


技術的な問題ではなくクラス変更の許可が下りるかどうかだけの問題です。

引用:
それとも全メンバが奇跡的に Protected だったのでしょうか?


問題部分ですが、Publicの関数部をオーバーライドでなんとか解決できそうです。

引用:
どのようなクラス側の改造が必要になったのですか?


リフレクションの Parmission が無いため、メンバが取得できませんでした。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-04-25 15:35
引用:

KT工房さんの書き込み (2008-04-25 14:51) より:

リフレクションの Parmission が無いため、メンバが取得できませんでした。


s/Parmission/Permission/

System.Security.Permissions.ReflectionPermission ってことですか...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-04-25 15:41
> リフレクションの Parmission が無いため、メンバが取得できませんでした。

それは、呼び出し側の問題ですね。クラス側に手を入れた所でどうにもなりません。
リフレクションのアクセス許可がないとは、変わった環境でコードが実行されているのでしょうか?
例えばインターネットからダウンロードしたアセンブリには既定ではリフレクションのアクセス許可がありません。

_________________
C#と諸々
KT工房
常連さん
会議室デビュー日: 2006/06/20
投稿数: 49
投稿日時: 2008-04-25 17:08
引用:
s/Parmission/Permission/


スペル間違っていましたね(汗


引用:
それは、呼び出し側の問題ですね。クラス側に手を入れた所でどうにもなりません。
リフレクションのアクセス許可がないとは、変わった環境でコードが実行されているのでしょうか?
例えばインターネットからダウンロードしたアセンブリには既定ではリフレクションのアクセス許可がありません。




リフレクションのGetFilesメソッドでNothingしか返ってこないため、
呼び出し元に Permission が必要なのかと思っていましたが、呼び出し側で使用するものなんですね・・・。
勉強不足ですみません。
ちなみに他の標準で提供されているクラスからはGetFilesメソッドで取得できました。

よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-04-25 17:32
アクセス許可がない場合は例外が発生します。今回はアクセス許可は無関係でしょう。
> 呼び出し元に Permission が必要なのかと思っていましたが、呼び出し側で使用するものなんですね・・・。
「呼び出し側」と「呼び出し元」って同じじゃないですか??
僕は KT工房さんが書いてるコードの方を指すつもりで「呼び出し側」と言いました。
ちなみに、アクセス許可は使用するのではなく与えられます。

標準で提供されているクラスから取得できたとありますが、もしかしてそれは public なフィールドだったりしませんか?
GetFields の引数に BindingFlags.Public, BindingFlags.NonPublic, BindingFlags.Instance の 3 つをちゃんと指定していますか?

コード:
FieldInfo[] allFields = typeof(Class1).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);




_________________
C#と諸々
KT工房
常連さん
会議室デビュー日: 2006/06/20
投稿数: 49
投稿日時: 2008-04-25 17:38
引用:

GetFields の引数に BindingFlags.Public, BindingFlags.NonPublic, BindingFlags.Instance の 3 つをちゃんと指定していますか?



まだまだ勉強不足で会話についていけないです・・・。
BindingFlags はよこけんさんの指定している3つとも指定しましたが、Nothingが返ってきます。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-04-25 17:54
こちらが一つ勘違いしていました。
ReflectionPermission がない場合は null を返しますね。
思い込みで返答してしまい、すみませんでした。

すみませんが、今から用事があるので返信できなくなります。

_________________
C#と諸々

スキルアップ/キャリアアップ(JOB@IT)