下記のコードのようにHogeクラスがHoge2インスタンスを持っている場合に、Hoge2のメソッドをラップしたメソッドを自動生成かインテリセンスで補完する方法を探しています。
interfaceを実装していて、フィールドとして持っている場合はVisualStudioのインテリセンスが機能しますが、下記のような場合だと機能しません。
拡張機能などでもかまわないので、ご教授いただけると幸いです。
cs
1 public class Hoge 2 { 3 Hoge2 m_hoge2; 4 5 //このようなメソッドを自動生成したい。 6 public void Do() 7 { 8 m_hoge2.Do(); 9 } 10 public void Do2() 11 { 12 m_hoge2.Do2(); 13 } 14 } 15 public class Hoge2 16 { 17 public void Do() 18 { 19 } 20 public void Do2() 21 { 22 } 23 }
> Hoge2のメソッドをラップしたメソッドを自動生成かインテリセンスで補完する
どういう結果になればいいのかを追記してもらえますか? インターフェイスを継承したときのように、インターフェイスで定義されているメソッドが、中身は throw new NotImplemantationException(); で自動的に追加されればいいのですか?
インターフェイスの場合とは違って、全く便利だとは思えないのですが、どうしてそんな機能が欲しいのですか?
補完結果を記述しました。
>インターフェイスの場合とは違って、全く便利だとは思えないのですが、どうしてそんな機能が欲しいのですか?
単にコードを書く手間を抑えられればいいなという考えからです。
なら一時的に public class Hoge : IHoge2 しておいてインテリセンスにひな型作らせ、しかるのち : IHoge を消しては?
m_hoge2 を public にすれば事足りるので、需要はほとんど無いと思われます。自分で作るしかないんじゃないでしょうか。
>なら一時的に public class Hoge : IHoge2 しておいてインテリセンスにひな型作らせ、しかるのち : IHoge を消しては?
ありがとうございます。思いつきませんでした。参考にさせていただきます。
>m_hoge2 を public にすれば事足りるので、需要はほとんど無いと思われます。自分で作るしかないんじゃないでしょうか。
Hoge2のメンバーをすべて公開したいのであればその手法で問題ありませんが、Hoge2の一部のメソッドだけを公開したい場合や、Hoge2のメソッドの実行の前に確実に特定のメソッドを実行したい場合は事足りません。
ますますもって需要が無さそうです。私ならマルチキャレットを使うか、Vim で開いてマクロで処理します。
> Hoge2の一部のメソッドだけを公開したい場合や、
言ってることが矛盾してるのでは? 「メソッドを自動生成」でやるなら、自動であなたがどれを公開したいのか Visual Studio が判断するのですか?
> Hoge2のメソッドの実行の前に確実に特定のメソッドを実行したい
どういう意味ですか? 「自動生成かインテリセンスで補完する方法」が知りたいのですよね? それと「実行の前に確実に特定のメソッドを実行」とどう関係するのでしょう?
もしかすると「アスペクト志向」を調べれば別の解決法がみつかるかもしれません。
SurferOnWwwさん
>言ってることが矛盾してるのでは? 「メソッドを自動生成」でやるなら、自動であなたがどれを公開したいのか Visual Studio が判断するのですか?
矛盾していないと思います。
VisualStudioのinterfaceの抽出の機能のようなものをイメージしていただけれるとわかりやすいかもしれません。
>どういう意味ですか? 「自動生成かインテリセンスで補完する方法」が知りたいのですよね? それと「実行の前に確実に特定のメソッドを実行」とどう関係するのでしょう?
以下のように補完されたメソッド内に記述したいという話です。
public void Do()
{
Aaa();
m_hoge2.Do();
}
質問で求めている自動生成、インテリセンスの手法をご存知でなければ存じていないという旨だけでありがたいので大丈夫です。
> ご存知でなければ存じていないという旨だけでありがたいので大丈夫です。
知っています。
Zuishinさん
VisualStudio側がこのような機能を提供していないということは、たしかに需要が少ない、もしくは、マルチキャレットなどを駆使して定義しろという事かもしれませんね。
ありがとうございました。
望み通りの物を作る方法は知っていて、作ることもできます。
> 質問で求めている自動生成、インテリセンスの手法をご存知でなければ存じていないという旨だけでありがたいので大丈夫です。
だったら最初から質問に「質問で求めている自動生成、インテリセンスの手法をご存知でなければ回答・レスは結構です。代案等は不用です」とはっきり書いておきましょう。
お互い手間が省けます。
継承関係に無い状態においてシグニチャがそのまんまな移譲コードが欲しい的な…?
当該機能が欲しそうな場面は…?と考えると pImpl とか書く場面かなぁ,とか.(この質問は C# だから該当しないけど)
(「pImplの実装作業って,何か機械的にやってくれるようなのは無いのかなぁ」とか思って調べたことはありますが,見つからなかったです)
回答2件
あなたの回答
tips
プレビュー