2012-12-20 3 views
1

사용자 정의 컨트롤을 만들 때 데이터베이스 클래스에 대해 알 필요가 없습니다.C# 함수 포인터

그러나 필자는 해당 데이터베이스 클래스의 특정 기능이 필요합니다. 직원 번호가 주어지면 직원 이름을 가져와야합니다.

사용자 정의 컨트롤에서 뭔가를 만들면 내 응용 프로그램에서 사용할 수 있습니다. 클릭 이벤트 또는 그와 비슷한 것을 연결하는 것과 같습니다.

C# 프로젝트에서 이전에 이런 식으로 작성한 적이 없으므로 무엇을 호출해야할지 모르겠다. 그것이 존재해야한다고 나는 상상할 것이다.

public string GetEmployeeName(int employeeNumber); 

누군가가 내가 할 노력하고 있어요 무엇인지 말해 줄 수 :

내 데이터베이스 클래스에서 호출 할 함수는이 서명이?

어려운 점이 있다면 좋은 예가 될 것입니다.

+1

이벤트에 가입 하시겠습니까? –

답변

3

예를 들어 대리인을 사용하여이 작업을 수행 할 수 있습니다. Func<TArgument, TResult>;

당신의 UserControl을에 공공 필드를 추가

//A method that has an int parameter and returns a string 
public Func<int, string> GetEmployeeName; 

을 사용자 정의 컨트롤에서 당신이 위임 사용할 수있는 직원의 이름을 얻을 필요가있을 때 : 당신은에서 대리자를 설정할 수 있습니다

string employeeName; 
if (GetEmployeeName != null) 
    employeeName = GetEmployeeName(employeeNumber); 

을 수행하여 호스팅 페이지 또는 제어 : 당신의 컨트롤이 보라를 호출 할 필요가있는 경우

myUserControl.GetEmployeeName = GetEmployeeName; 
+0

+1 지금까지 Khan 씨, 귀하 만의 버전이 컴파일되었습니다. – jp2code

4

내가 원하는 것은 delegate을 사용하는 것입니다.

+0

굉장, 네이트! 나는 그것이 단순해야한다는 것을 알았다. – jp2code

+0

이것을 확장 해 보겠습니다. 대리자를 사용하여 인스턴스화시 사용자 컨트롤에 메서드를 전달합니다. 이 방법은 데이터베이스에 대해 알아야 할 것입니다. 사용자 정의 컨트롤은이 메소드를 호출해야하며,이 메소드가 무엇을하는지 알지 못하고 메소드가 반환하는 값에 상관없이 동작 할 수 있습니다. – tomfanning

+0

같은 양식에 대해 약 10 개의 사용자 컨트롤이 있기 때문에 정적 대리자를 만들려고했지만 ** 호출 할 수없는 멤버는 메서드처럼 사용할 수 없습니다 ** 나는 각각에 대해 이것을 선언해야한다고 생각합니다. 인스턴스. – jp2code

2

데이터베이스에 대한 비즈니스 액션 나는 인터페이스를 작성하고 구현 인스턴스를 제안한다.

+0

좋은 소리는 들지만 자체 코드가 포함 된 인터페이스를 만드는 방법을 모르겠습니다. 나는 내가 원하는만큼 자주이 길로 내려 가지 않아. 이 어딘가에 대한 예가 있습니까? – jp2code

+1

@ jp2code 인터페이스는 코드를 가질 수 없지만 UserControl은 인터페이스를 "알"며 데이터베이스 클래스는 인터페이스를 "구현"합니다. 그런 식으로 귀하의 UserControl 클래스 대신 인터페이스를 참조하지만 여전히 클래스에서 코드를 호출 할 수 있습니다. 참고 : http://msdn.microsoft.com/en-us/library/87d83y5b(v=vs.110).aspx – Nate