ผมกำลังหัดเขียน เกี่ยวกับ Delagate โดยอ้างอิงหนังสือ "หัดเขียนโปรแกรมภาษาC# แบบมืออาชีพ" ของ คุณ วรชัย เชาว์วีระประสิทธิ์ ค่าย ARIP หน้า 239 แต่ติดปัญหานิดหน่อย อยากขอความกรุณาผู้รู้ช่วยบอก ที่ครับ
using System;
namespace Delegate_239
{
delegate double Operation(double left,double right);
class Operations
{
private OperationProvider[] providers;
public Operations()
{
providers = new OperationProvider[4];
providers[0] =new OperationProvider('+',Operation(Add));
providers[1] =new OperationProvider('-',Operation(Subtract));
providers[2] =new OperationProvider('*',Operation(Multiply));
providers[3] =new OperationProvider('/',Operation(Divide));
}
private double Add(double left,double right)
{
return left + right;
}
private double Subtract(double left ,double right)
{
return left - right;
}
private double Multiply(double left , double right)
{
return left * right;
}
private double Divide(double numerator,double denominator)
{
if(denominator ==0)
{
throw new DivideByZeroException("Denominator is Zero !");
}
return numerator/denominator;
}
public string[] Tokenize(string line,out Operation operation)
{
operation = null;
string[] tokens = null;
foreach(OperationProvider provider in providers)
{
char symbol = provider.Symbol;
int i = line.IndexOf(symbol);
if (i<0)
{
continue;
}
tokens = line.Split(symbol);
operation = provider.Operation;
break;
}
return tokens == null || tokens.Length !=2 ? null :tokens;
}
//private OperationProvider[] providers;
}
class OperationProvider
{
public OperationProvider(char symbol,Operation operation)
{
this.symbol = symbol;
this.operation=operation;
}
public char Symbol {get {return symbol;}}
public Operation Operation {get{return operation;}}
private char symbol;
private Operation operation;
}
class App
{
static void Maint()
{
string line = Console.ReadLine();
Operations operations = new Operations();
Operation operation;
string [] tokens = operations.Tokenize(line, out operation);
if(tokens != null)
{
Console.WriteLine("= {0}",operation(Convert.ToDouble(tokens[0]),
Convert.ToDouble(tokens[1])));
}
else
{
Console.WriteLine("= invalid string");
}
}
}
}
Error ที่ได้
1. D:deverloperVCSDelegate_239Delegate_239Class1.cs(12): Method 'Delegate_239.Operations.Add(double, double)' referenced without parentheses
2. D:deverloperVCSDelegate_239Delegate_239Class1.cs(13): Method 'Delegate_239.Operations.Subtract(double, double)' referenced without parentheses
3. D:deverloperVCSDelegate_239Delegate_239Class1.cs(14): Method 'Delegate_239.Operations.Multiply(double, double)' referenced without parentheses
4. D:deverloperVCSDelegate_239Delegate_239Class1.cs(15): Method 'Delegate_239.Operations.Divide(double, double)' referenced without parentheses