PDA

View Full Version : ผมผิดตรงไหนช่วยบอกที (C#)



virusman
27-10-2004, 05:12 AM
ผมกำลังหัดเขียน เกี่ยวกับ 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

tanakorn
30-10-2007, 07:51 PM
ตรงบรรทัดที่คุณเขียนว่า

providers[0] = new OperationProvider(&#39;+&#39;, Operation(Add));
providers[1] = new OperationProvider(&#39;-&#39;, Operation(Subtract));
providers[2] = new OperationProvider(&#39;*&#39;, Operation(Multiply));
providers[3] = new OperationProvider(&#39;/&#39;, Operation(Divide));

ให้แก้เป็น
providers[0] = new OperationProvider(&#39;+&#39;, new Operation(Add));
providers[1] = new OperationProvider(&#39;-&#39;, new Operation(Subtract));
providers[2] = new OperationProvider(&#39;*&#39;, new Operation(Multiply));
providers[3] = new OperationProvider(&#39;/&#39;, new Operation(Divide));

ไม่รู้ว่าแก้ปัญหาได้มั๊ย?

hina_lovex
02-11-2007, 03:11 PM
static void Maint()
{
}

ตรง static void Main พิมพ์ผิดครับผม นอกนั้นก็เหมือนที่คุณ tanakorn บอก ครับผม ลอง Run ดูแล้ว Run ได้ครับ

hina_lovex
02-11-2007, 04:24 PM
อธิบายวิธีการทำงานของ code สำหรับผู้เริ่มต้นเขียน C# ครับ

**Hidden Content: Check the thread to see hidden data.**