質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

受付中

特定のフィールドのクラスのメソッドをラップしたメソッドを自動生成したい

concern12
concern12

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

2回答

0評価

1クリップ

193閲覧

投稿2022/05/15 02:35

編集2022/05/17 21:54

下記のコードのようにHogeクラスがHoge2インスタンスを持っている場合に、Hoge2のメソッドをラップしたメソッドを自動生成かインテリセンスで補完する方法を探しています。

interfaceを実装していて、フィールドとして持っている場合はVisualStudioのインテリセンスが機能しますが、下記のような場合だと機能しません。
拡張機能などでもかまわないので、ご教授いただけると幸いです。

cs

public class Hoge { Hoge2 m_hoge2; //このようなメソッドを自動生成したい。 public void Do() { m_hoge2.Do(); } public void Do2() { m_hoge2.Do2(); } } public class Hoge2 { public void Do() { } public void Do2() { } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2022/05/15 02:55

> Hoge2のメソッドをラップしたメソッドを自動生成かインテリセンスで補完する どういう結果になればいいのかを追記してもらえますか? インターフェイスを継承したときのように、インターフェイスで定義されているメソッドが、中身は throw new NotImplemantationException(); で自動的に追加されればいいのですか? インターフェイスの場合とは違って、全く便利だとは思えないのですが、どうしてそんな機能が欲しいのですか?
concern12

2022/05/15 03:30

補完結果を記述しました。 >インターフェイスの場合とは違って、全く便利だとは思えないのですが、どうしてそんな機能が欲しいのですか? 単にコードを書く手間を抑えられればいいなという考えからです。
episteme

2022/05/15 03:43

なら一時的に public class Hoge : IHoge2 しておいてインテリセンスにひな型作らせ、しかるのち : IHoge を消しては?
Zuishin

2022/05/15 03:51

m_hoge2 を public にすれば事足りるので、需要はほとんど無いと思われます。自分で作るしかないんじゃないでしょうか。
concern12

2022/05/15 04:28

>なら一時的に public class Hoge : IHoge2 しておいてインテリセンスにひな型作らせ、しかるのち : IHoge を消しては? ありがとうございます。思いつきませんでした。参考にさせていただきます。 >m_hoge2 を public にすれば事足りるので、需要はほとんど無いと思われます。自分で作るしかないんじゃないでしょうか。 Hoge2のメンバーをすべて公開したいのであればその手法で問題ありませんが、Hoge2の一部のメソッドだけを公開したい場合や、Hoge2のメソッドの実行の前に確実に特定のメソッドを実行したい場合は事足りません。
Zuishin

2022/05/15 04:33 編集

ますますもって需要が無さそうです。私ならマルチキャレットを使うか、Vim で開いてマクロで処理します。
SurferOnWww

2022/05/15 04:38 編集

> Hoge2の一部のメソッドだけを公開したい場合や、 言ってることが矛盾してるのでは? 「メソッドを自動生成」でやるなら、自動であなたがどれを公開したいのか Visual Studio が判断するのですか? > Hoge2のメソッドの実行の前に確実に特定のメソッドを実行したい どういう意味ですか? 「自動生成かインテリセンスで補完する方法」が知りたいのですよね? それと「実行の前に確実に特定のメソッドを実行」とどう関係するのでしょう?
Zuishin

2022/05/15 04:42

もしかすると「アスペクト志向」を調べれば別の解決法がみつかるかもしれません。
concern12

2022/05/15 05:22

SurferOnWwwさん >言ってることが矛盾してるのでは? 「メソッドを自動生成」でやるなら、自動であなたがどれを公開したいのか Visual Studio が判断するのですか? 矛盾していないと思います。 VisualStudioのinterfaceの抽出の機能のようなものをイメージしていただけれるとわかりやすいかもしれません。 >どういう意味ですか? 「自動生成かインテリセンスで補完する方法」が知りたいのですよね? それと「実行の前に確実に特定のメソッドを実行」とどう関係するのでしょう? 以下のように補完されたメソッド内に記述したいという話です。 public void Do() { Aaa(); m_hoge2.Do(); } 質問で求めている自動生成、インテリセンスの手法をご存知でなければ存じていないという旨だけでありがたいので大丈夫です。
Zuishin

2022/05/15 05:23

> ご存知でなければ存じていないという旨だけでありがたいので大丈夫です。 知っています。
concern12

2022/05/15 05:24

Zuishinさん VisualStudio側がこのような機能を提供していないということは、たしかに需要が少ない、もしくは、マルチキャレットなどを駆使して定義しろという事かもしれませんね。 ありがとうございました。
Zuishin

2022/05/15 05:26

望み通りの物を作る方法は知っていて、作ることもできます。
SurferOnWww

2022/05/15 09:32

> 質問で求めている自動生成、インテリセンスの手法をご存知でなければ存じていないという旨だけでありがたいので大丈夫です。 だったら最初から質問に「質問で求めている自動生成、インテリセンスの手法をご存知でなければ回答・レスは結構です。代案等は不用です」とはっきり書いておきましょう。 お互い手間が省けます。
fana

2022/05/16 02:44 編集

継承関係に無い状態においてシグニチャがそのまんまな移譲コードが欲しい的な…? 当該機能が欲しそうな場面は…?と考えると pImpl とか書く場面かなぁ,とか.(この質問は C# だから該当しないけど) (「pImplの実装作業って,何か機械的にやってくれるようなのは無いのかなぁ」とか思って調べたことはありますが,見つからなかったです)

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。