2011-10-15 2 views
1

안녕하세요, 코드에 표시된대로 매개 변수로 위임 클래스가 있습니다. 그러나 오류가 발생합니다. "예상되는 오류 1 유형 ... \ Classes \ Class1.cs 218 클래스 "및 "오류 2, 예상 된 ... \ Classes \ Class1.cs 218 96 클래스 "를 참조하십시오. 문제를 어떻게 해결합니까? 미리 감사드립니다! 메신저 byref를 전달하려고하므로 클래스가 초기화 될 때 해당 메서드가 대리자에 연결됩니다.C# 클래스 생성자에서 매개 변수로 델리게이트

public constructor(ref delegate bool delegatename(someparameters)) 
      { 
        some code 
      } 

srry 아무것도 지금, 작동, 당신은 생성자의 대리자 형식을 선언 할 수 없습니다

+3

이 정말 C# 코드 파일에서 올려진다? 실제로 이상하게 보입니다. –

+1

C#의 생성자는 클래스 이름으로 정의됩니다. MyClass {public MyClass() {...}} –

+0

물론 제가 조금 변경했습니다 ... – irisjay

답변

4

을 TKX. 먼저 대리자 형식을 선언해야하고, 당신은 생성자에서 사용할 수 있습니다 :

public delegate bool delegatename(someparameters); 

public constructor(ref delegatename mydelegate) 
{ 
    some code... 
} 
+0

왜 'ref'입니까? 참조 유형이 아닌가? 또한, 그것은 무엇을 되돌려 보낼 것입니까? – shinzou

5

당신은 확실하지 ... Action<T> 같은 것을 통과 할 수는 있지만 참조하여 전달하려는 이유. 당신이 ref 키워드를 사용하는 이유 -

int x = 7; 
Foo(x, p => { Console.WriteLine(p); }); 
+1

그의 경우에는'Func <..., bool>'이 더 적합 할 것입니다. – DeCaf

2

1 : 예를 들어, 이와 같은 방법을 가질 수 있습니다

static void Foo(int x, Action<int> f) { 
    f(x + 23); 
} 

을 그리고 다음과 같이 호출?

2 - constructor은 클래스 이름입니까? 없는 경우, 당신은 PHP의 다른이 잘못을 다하고 : public function __construct(..) { } 생성자는 클래스 이름의 이름, 예를 들면 :

class foo { 
    public foo() { } // <- class constructor 
} 

3 - 일반적으로 대의원의 유형은 무효입니다.

찾고 계신가요?

class Foo { 

     public delegate bool del(string foo); 

     public Foo(del func) { //class constructor 
       int i = 0; 
       while(i != 10) { 
         func(i.ToString()); 
         i++; 
       } 
     } 
    } 

다음 :

class App 
{ 

    static void Main(string[] args) 
    { 

     Foo foo = new Foo(delegate(string n) { 
          Console.WriteLine(n); 
          return true; //this is it unnecessary, you can use the `void` type instead.   }); 
     Console.ReadLine(); 
    } 
} 

출력 :

1 
2 
3 
4 
5 
6 
7 
8 
9 
+0

대리인은 무효화되어야한다는 규칙이 있습니까? 그걸 'Func <...>'에게 말하십시오. – siride

+1

아니요, 위임자가 무효화되어야한다는 규칙이 없습니다. 이는 귀하의 경우에 따라 다릅니다. –

+0

그럼 왜 그걸 넣었 니? 그런 규칙이나 관례는 없습니다. 많은 대의원이 무효입니다. 아마도 단순함을 위해 거의 항상 무효 인 이벤트 처리기를 생각하고있을 것입니다. – siride

관련 문제