DOBON.NET DOBON.NETプログラミング掲示板過去ログ

別クラスで宣言した関数ポインタの移動方法

環境/言語:[Win7 C# FrameWork3.5]
分類:[.NET]

別々のクラスでそれぞれ宣言したdelegate voidを
格納したいのですが、型不一致で格納できません。
何か方法がありましたら、ご教授お願いします。

以下ソースです。
class a
{
struct abc
{
int data1;
int data2;
}
public delegate void func1(abc brc);
}
class b
{
public delegate void func2(a.abc brc);

public void SetData(func2 pfunc)
{
a.func1 aaa = pfunc; <---ここで型不一致
a.func1 aaa = (a.fun1)pfunc; <---単純なキャストもだめ
}
}

<補足>
class aはDLLのためソースが触れません。
使用するEXEではClass aのDLLを直接参照したくはありません。

非常に知識不足なので言葉が足りず解りにくいと思いますが
宜しくお願いします。
■No30524に返信(telnetさんの記事)

public void SetData(a.func1 pfunc)
{
a.func1 aaa = pfunc;
}

では駄目ですか?
■No30527に返信(shuさんの記事)
> ■No30524に返信(telnetさんの記事)
>
> public void SetData(a.func1 pfunc)
> {
> a.func1 aaa = pfunc;
> }
>
> では駄目ですか?
返信ありがとうございます。

引数をa.func1とした場合、SetDataをコールするEXEに
Class aを参照しなくてはいけなくなるので、別の方法を考えております。

EXEでは
void button1_Click()
{
abc(callback);
}
void callback(b.abc stData)
{
text.text = stData.Data1.ToString();
}

void abc(b.Func2 fp)
{
b.SetData(fp);
}
のように使用したいと考えております。

説明が不足しており申し訳ありません。
■No30528に返信(telnetさんの記事)

その呼び出したとすると
class b
{
    struct abc
    {
    }

    public delegate void func2(abc brc);

    public void SetData(func2 pfunc)
    {
        a.func1 aaa = (a)=>{
                         abc b;
                         aからbへの設定
                         pfunc(b);
                      }
    }            
}
のような感じにならないと駄目かと思います。
コードは動作確認してません。
■No30532に返信(shuさんの記事)
> ■No30528に返信(telnetさんの記事)
>
> その呼び出したとすると
> class b
> {
> struct abc
> {
> }
>
> public delegate void func2(abc brc);
>
> public void SetData(func2 pfunc)
> {
> a.func1 aaa = (a)=>{
> abc b;
> aからbへの設定
> pfunc(b);
> }
> }
> }
> のような感じにならないと駄目かと思います。
> コードは動作確認してません。
返信ありがとうございます。

(a)=>の部分がわかりません。
class aに{}の内容で関数を作成するという事でしょうか?

理解不足で申し訳ありませんが、具体的にご教授お願いします。
■No30534に返信(telnetさんの記事)

> (a)=>の部分がわかりません。
> class aに{}の内容で関数を作成するという事でしょうか?
普通にラムダ式です。(a)のa,abc bはクラス名と一致しているので駄目でしたね。
a1とかb1とかにして下さい。(a)の()は特に付けなくても良いです。
class b内に関数を設けてもよいのですがpfuncをprivate変数に退避する必要があります。
shu様

>普通にラムダ式です。
ラムダ式を知りませんでした。
これから勉強したいと思います。

無事関数を渡すことが出来ました。
丁寧に教えて頂き、ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板