public delegate void Call();
class Program
{
static void Main(string[] args)
{
ClassA classa = new ClassA();
ClassB classb = new ClassB();
classb.MethodB();
}
}
public class ClassA
{
ClassB classb = new ClassB();
public ClassA()
{
classb.call = MethodA;
}
public void MethodA()
{
Console.WriteLine("Call Class A Function");
}
}
public class ClassB
{
public Call call;
public void MethodB()
{
Console.WriteLine("Call Class B Function");
call();
}
}
問題1,如圖1
請問我要如何在不宣告ClassA的情況下讓ClassB裡面的函數可以引用ClassA裡面的函數,我這樣執行會錯誤我不太知道問題在哪裡,麻煩指點一下.
public delegate void Call();
class Program
{
static void Main(string[] args)
{
ClassB classb = new ClassB();
classb.MethodB();
}
}
public class ClassA
{
public void MethodA()
{
Console.WriteLine("Call Class A Function");
}
public void MethodA2()
{
Console.WriteLine("wwwwwwwwwwwwwwwwwwwwww");
}
}
public class ClassB
{
ClassA classA = new ClassA();
Call call;
public ClassB()
{
call = classA.MethodA;
}
public void ChangeDel()
{
call = classA.MethodA2;
}
public void MethodB()
{
Console.WriteLine("Call Class B Function");
call();
}
}
問題2,如圖2
我這樣雖然ClassB可以呼叫ClassA的函數,可是我都宣告了那委派不是多此一舉,還是有其他觀念呢
問題3,如圖2
那假設我有另外一個ClassC,我想要呼叫call這個委派的時候,一樣可以呼叫ClassA裡面的函數嗎.
第一次發文問問題,表達不清楚的地方請見諒
舉個委派例子
getprice傳進一個price後給haldor處理再傳回處理後的price
而haldor內的邏輯是之後再給的 Convert.ToInt32(Math.Pow(20d,2d))
delegate int PriceHaldor(int price);
class creditcard
{
public int getprice(int price, PriceHaldor haldor)
{
return haldor(price);
}
}
static void Main()
{
PriceHaldor price = new PriceHaldor(r => Convert.ToInt32(Math.Pow(20d,2d)) );
creditcard card = new creditcard();
int q = card.getprice(money, price);
}
這個對我來說太高深了....
你這不是委派阿
所以我打得跟委派沒有關係嗎... 原來都打錯了
您的那篇文我現在卡在怎麼在外部實例B
using System;
namespace ConsoleApp2
{
public delegate void Call();
class Program
{
static void Main(string[] args)
{
ClassB classb = new ClassB();
classb.ChangeDel();
ClassC classc = new ClassC(classb);
}
public class ClassA
{
public void MethodA()
{
Console.WriteLine("Call Class A Function");
}
public void MethodA2()
{
Console.WriteLine("wwwwwwwwwwwwwwwwwwwwww");
}
}
public class ClassB
{
ClassA classA = new ClassA();
Call call;
public ClassB()
{
call = classA.MethodA;
}
public void ChangeDel()
{
call += classA.MethodA2;
}
public void MethodB()
{
Console.WriteLine("Call Class B Function");
call();
}
}
public class ClassC
{
ClassB _classb;
public ClassC(ClassB classb)
{
this._classb = classb;
_classb.MethodB();
}
}
}
}
這樣嘛!!!
我更新了一個委派的方法給你看
對
PriceHaldor price = new PriceHaldor(r => Convert.ToInt32(Math.Pow(20d,2d))
不好意思 目前這段看不懂 那個r是lambda的表示法,代表r帶入後面的函式 可是為什麼=>後面沒有出現r,那個20d,2d請問是什麼