DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
親記事をトピックトップへ
]
このトピックに書きこむ
過去ログには書き込み不可
[ トピック内全5記事(1-5 表示) ] <<
0
>>
■32949
/ inTopicNo.1)
Re[4]: 拡張メソッドの呼び出し方
▼
■
□投稿者/ oni
一般人(3回)-(2015/05/11(Mon) 13:08:14)
■
No32947
に返信(Azuleanさんの記事)
> 2015/05/10(Sun) 20:39:21 編集(投稿者)
Azuleanさん、ありがとうございます。
> たぶん、参照できる範囲に同じ名前の型があるか、同じ名前のプロパティがあるかなどの理由で HttpRequestMessageExtensions を一意に特定できないのかもしれません。
>
> 手元の Windows Forms の実験環境では再現しないこと、VB.NET は主言語ではないこと、ASP.NET のなじみがないことから、具体的なアドバイスはできかねます。。。
Windowsフォームアプリケーションでは、確かに再現しないですね。
WebApiプロジェクト作成時に自動生成される何かとおそらく競合しているのかもしれませんが、それ以上はわかりませんでした。
request.CreateResponse(statusCode)でエラーとならないため、解決とさせていただきます。
ありがとうございました。
解決
済
み!
引用返信
削除キー/
編集
削除
■32947
/ inTopicNo.2)
Re[3]: 拡張メソッドの呼び出し方
▲
▼
■
□投稿者/ Azulean
大御所(448回)-(2015/05/10(Sun) 20:38:58)
2015/05/10(Sun) 20:39:21 編集(投稿者)
■
No32946
に返信(oniさんの記事)
> 「'HttpRequestMessageExtensions' は、名前空間 'System.Net.Http' では不適切です。」
> というエラーになってしまいます。
'<name>' は、名前空間 '<namespacename>' では不適切です。
https://msdn.microsoft.com/ja-jp/library/8f0k13d2.aspx
> あいまいな名前を指定したため、ほかの名前と競合しています。
> Visual Basic のコンパイラには競合を解決するための規則がないため、あいまいでない名前に変更する必要があります。
たぶん、参照できる範囲に同じ名前の型があるか、同じ名前のプロパティがあるかなどの理由で HttpRequestMessageExtensions を一意に特定できないのかもしれません。
手元の Windows Forms の実験環境では再現しないこと、VB.NET は主言語ではないこと、ASP.NET のなじみがないことから、具体的なアドバイスはできかねます。。。
引用返信
削除キー/
編集
削除
■32946
/ inTopicNo.3)
Re[2]: 拡張メソッドの呼び出し方
▲
▼
■
□投稿者/ oni
一般人(2回)-(2015/05/10(Sun) 18:44:45)
Azuleanさん、こんにちわ。
ご返信ありがとうございます。
> 何も気にせず、単なるメソッドのように呼べばよいです。
request.CreateResponse(statusCode)
と記述することで、普通に呼ぶことができました。
インテリセンスが働かないため、呼べないと思っておりました。
ありがとうございました。
> 拡張メソッドは、本来 HttpRequestMessageExtensions.CreateResponse(request, statusCode) と書かないといけない呼び出しを、request.CreateResponse(statusCode) と簡便に書けるようにする仕組みです。
> すでに存在する拡張メソッドを使うだけであれば、対象のオブジェクトのメソッドのように呼べばよいだけです。
> 明示的に呼びたい場合は、前述のように クラス名.メソッド名(対象のオブジェクト, 残りの引数) という呼び方もできます。(単なる Shared メソッドとして扱える)
>
> 拡張メソッドを使ってもコンパイルが失敗する場合の多くは、名前空間の参照が足りていないことです。
> Imports で対象のクラスの名前空間を参照していれば問題ありません。
もうひとつ初歩的な質問なのですが、
Imports System.Net.Http
を記述しているのですが、
HttpRequestMessageExtensions.CreateResponse(request, statusCode)
と記述すると
「'HttpRequestMessageExtensions' は、名前空間 'System.Net.Http' では不適切です。」
というエラーになってしまいます。
まだ、名前空間の参照が足りないのでしょうか。
何度もお手数ですが、ご教授ください。
引用返信
削除キー/
編集
削除
■32945
/ inTopicNo.4)
Re[1]: 拡張メソッドの呼び出し方
▲
▼
■
□投稿者/ Azulean
大御所(447回)-(2015/05/09(Sat) 15:34:03)
■
No32944
に返信(oniさんの記事)
> この中の「戻り値にHttpResponseMessageを指定する」にある「HttpRequestMessageExtensions」の
> 使い方がわからずに困っております。
何も気にせず、単なるメソッドのように呼べばよいです。
> ただ、この例は自前で拡張メソッドを用意して利用する内容で、
> もともと存在する拡張メソッド「HttpResponseMessageExtensions」にあるメソッドを
> どのように呼び出すのかが理解することができませんでした。
拡張メソッドは、本来 HttpRequestMessageExtensions.CreateResponse(request, statusCode) と書かないといけない呼び出しを、request.CreateResponse(statusCode) と簡便に書けるようにする仕組みです。
すでに存在する拡張メソッドを使うだけであれば、対象のオブジェクトのメソッドのように呼べばよいだけです。
明示的に呼びたい場合は、前述のように クラス名.メソッド名(対象のオブジェクト, 残りの引数) という呼び方もできます。(単なる Shared メソッドとして扱える)
拡張メソッドを使ってもコンパイルが失敗する場合の多くは、名前空間の参照が足りていないことです。
Imports で対象のクラスの名前空間を参照していれば問題ありません。
> 思いついたのが、以下の内容です。
(略)
> 上記では、循環参照になってしまうのですが、正しい記述方法がわかりません。
この部分で掲載されていたソースコードは消してください。
本来呼びたい HttpRequestMessageExtensions クラスのメソッドを呼びづらくするだけなので。
引用返信
削除キー/
編集
削除
■32944
/ inTopicNo.5)
拡張メソッドの呼び出し方
▲
▼
■
□投稿者/ oni
一般人(1回)-(2015/05/09(Sat) 14:47:27)
環境/言語:[OS:Windows8.1 64bit、言語:VB.NET 2013]
分類:[ASP.NET]
こんにちわ、oniといいます。お世話になります。
@ITさんの以下のWebサイトの情報をもとに、ASP.net WebAPIの勉強をしております。
http://www.atmarkit.co.jp/ait/articles/1311/06/news070_3.html
この中の「戻り値にHttpResponseMessageを指定する」にある「HttpRequestMessageExtensions」の
使い方がわからずに困っております。
「拡張メソッド」は以下を参照して理解できたつもりです。
https://msdn.microsoft.com/ja-jp/library/bb384936%28v=vs.108%29.aspx
ただ、この例は自前で拡張メソッドを用意して利用する内容で、
もともと存在する拡張メソッド「HttpResponseMessageExtensions」にあるメソッドを
どのように呼び出すのかが理解することができませんでした。
思いついたのが、以下の内容です。
(ソース)
Imports System.Runtime.CompilerServices
Imports System.Net.Http
Module Extensions
<Extension> _
Public Function CreateResponse(rm As System.Net.Http.HttpRequestMessage, sc As System.Net.HttpStatusCode) As System.Net.Http.HttpResponseMessage
Return rm.CreateResponse(sc)
End Function
End Module
上記では、循環参照になってしまうのですが、正しい記述方法がわかりません。
開発環境はVisualBasic2013です。
基本的なことが理解できていないのかもしれませんが、よろしくお願いいたします。
引用返信
削除キー/
編集
削除
トピック内ページ移動 / <<
0
>>
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-