C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#の匿名メソッドをVBに置き換えるには・・・


(過去ログ 38 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■19970 / inTopicNo.1)  C#の匿名メソッドをVBに置き換えるには・・・
  
□投稿者/ jiioi (9回)-(2008/06/03(Tue) 13:45:23)

分類:[.NET 全般] 

おせわになっています。
jiioiです。
この前、匿名メソッドをVBに置き換える方法を教えていただきましたが、
戻り値がある場合はどうしたらいいかおしえていただけないでしょうか?
よろしくおねがいします。

C#
class TGrid : IGrid {
private TGraphPainter _core;
private TPlotArea _plotArea;
private TAxisAbstract _axis;
private TGridGroup _grids;
private bool _visible;
private double _interval;
private Pen _pen;
private bool _isSuppressFirst;
private bool _isSuppressLast;

/// <summary>グリッド線を描画します。</summary>
public
void Draw() {
if( ! _visible ) return;

Graphics g = _core.Graphics;

Region clipBak = g.Clip;
g.Clip = _plotArea.GetClippingRegion();
{
TAxisAbstract.DTraceAxisLineCallback callback =
delegate( double interval, double value, Point point, bool isFirst, bool isLast ) {
if( isFirst && _isSuppressFirst ) return true;
if( isLast && _isSuppressLast ) return true;

_axis.DrawGridLine( g, _pen, point );
return true;
};
_axis.TraceAxisLineCallback( _interval, callback );
}
g.Clip = clipBak;
}
}
引用返信 編集キー/
■19971 / inTopicNo.2)  Re[1]: C#の匿名メソッドをVBに置き換えるには・・・
□投稿者/ 魔界の仮面弁士 (756回)-(2008/06/03(Tue) 14:16:21)
No19970 (jiioi さん) に返信
> この前、匿名メソッドをVBに置き換える方法を教えていただきましたが、
> 戻り値がある場合はどうしたらいいかおしえていただけないでしょうか?

VB 側は、Sub が Function に変わるだけで、後は戻り値が無い場合と一緒です。
引用返信 編集キー/
■19973 / inTopicNo.3)  Re[2]: C#の匿名メソッドをVBに置き換えるには・・・
□投稿者/ jiioi (11回)-(2008/06/03(Tue) 14:21:12)
No19971 (魔界の仮面弁士 さん) に返信
> ■No19970 (jiioi さん) に返信
>>この前、匿名メソッドをVBに置き換える方法を教えていただきましたが、
>>戻り値がある場合はどうしたらいいかおしえていただけないでしょうか?
>
> VB 側は、Sub が Function に変わるだけで、後は戻り値が無い場合と一緒です。

そうおもって書き換えてみましたが、
Dim callback As TAxisAbstract.DTraceAxisLineCallback = New anonymous(_isSuppressFirst, _isSuppressLast, _axis, g, _pen)
この部分で暗黙的な変換が出来ないと怒られました。



Public Sub Draw()
If Not _visible Then
Return
End If

Dim g As Graphics = _core.Graphics

Dim clipBak As Region = g.Clip
g.Clip = _plotArea.GetClippingRegion()

Dim callback As TAxisAbstract.DTraceAxisLineCallback = New anonymous(_isSuppressFirst, _isSuppressLast, _axis, g, _pen)

_axis.TraceAxisLineCallback(_interval, callback)
g.Clip = clipBak
End Sub

'匿名メソッド
Private Class anonymous

Private t_isSuppressFirst As Boolean
Private t_isSuppressLast As Boolean
Private t_axis As TAxisAbstract
Private tg As Graphics
Private t_pen As Pen

Public Sub New(ByVal _isSuppressFirst As Boolean, ByVal _isSuppressLast As Boolean, ByVal _axis As TAxisAbstract, ByVal g As Graphics, ByVal _pen As Pen)
t_isSuppressFirst = _isSuppressFirst
t_isSuppressLast = _isSuppressLast
t_axis = _axis
tg = g
t_pen = _pen
End Sub
Public Shared Narrowing Operator CType(ByVal o As anonymous) As TAxisAbstract.DTraceAxisLineCallback
Return AddressOf o.callback
End Operator
Private Function callback(ByVal interval As Double, ByVal value As Double, ByVal point As Point, ByVal isFirst As Boolean, ByVal isLast As Boolean) As Boolean
If isFirst AndAlso t_isSuppressFirst Then
Return True
End If
If isLast AndAlso t_isSuppressLast Then
Return True
End If

t_axis.DrawGridLine(tg, t_pen, point)
Return True
End Function
引用返信 編集キー/
■19978 / inTopicNo.4)  Re[3]: C#の匿名メソッドをVBに置き換えるには・・・
□投稿者/ 魔界の仮面弁士 (757回)-(2008/06/03(Tue) 14:51:04)
No19973 (jiioi さん) に返信
>>> この前、匿名メソッドをVBに置き換える方法を教えていただきましたが、
No19845 で始まるスレッドですね。

>>> 戻り値がある場合はどうしたらいいかおしえていただけないでしょうか?
>> VB 側は、Sub が Function に変わるだけで、後は戻り値が無い場合と一緒です。
今回の場合は、DTraceAxisLineCallback 型の定義部分ですね。

> そうおもって書き換えてみましたが、
> Dim callback As TAxisAbstract.DTraceAxisLineCallback = New anonymous(_isSuppressFirst, _isSuppressLast, _axis, g, _pen)
> この部分で暗黙的な変換が出来ないと怒られました。
それは、縮小変換だからですよね。
「暗黙的」な変換ができないだけで、「明示的」な変換はできるはず。


(修正案1) Narrowing Operator CType ではなく、Widening Operator CType にする。
(修正案2) DirectCast を使い、明示的変換を行う。
(修正案3) Option Strict Off モードにする。
(修正案4) 型変換演算子を実装する代わりに、DTraceAxisLineCallback のインスタンスを返すメソッドを実装する。
引用返信 編集キー/
■19980 / inTopicNo.5)  Re[4]: C#の匿名メソッドをVBに置き換えるには・・・
□投稿者/ jiioi (13回)-(2008/06/03(Tue) 15:13:44)
> (修正案1) Narrowing Operator CType ではなく、Widening Operator CType にする。
> (修正案2) DirectCast を使い、明示的変換を行う。
> (修正案3) Option Strict Off モードにする。
> (修正案4) 型変換演算子を実装する代わりに、DTraceAxisLineCallback のインスタンスを返すメソッドを実装する。

Narrowing → Wideningにかえたら出来ました。
他の修正案も勉強したいと思います。
どうもありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -