2013-02-13 2 views
5

제목이 잘못되었으므로 올바른 용어를 표시하십시오.C# 일반 클래스의 인스턴스 만들기

나는 제네릭 형식 T을 받아 DAL_Base라는 기본 클래스를 가지고있다. 유형 T은 Business Objects 계층의 많은 클래스에서 가져 오며 각 클래스에는 해당하는 데이터 액세스 계층이 있습니다.

DAL_Base은 레코드 선택, 삽입 및 업데이트 방법을 호출하는 데 사용하는 저장 프로 시저 이름과 매개 변수를 지정할 수있는 매개 변수를 허용합니다.

현재 붙어있는 것 같습니다. DAL_Base의 새로운 인스턴스를 인스턴스화하는 방법을 찾을 수없는 것 같습니다. 다양한 변수를 초기화해야합니다.

부분 목록 :

public class DAL_Base<T> where T : IDisposable, new() { 

    public DAL_Base<T>() { // <= ERROR HERE 
    // initialize items that will be used in all derived classes 
    } 

} 

오류 VS2010 나에게주고있다이다 :

잘못된 토큰 '('

클래스, 구조체 또는 인터페이스 멤버 선언에 내가 이 괄호없이 생성자를 만들려고했지만 유용하지는 않습니다.

검색 할 때 반환 할 수있는 것만 큼 제네릭 유형 T의 인스턴스를 만드는 방법입니다. 어떻게하는지 쉽게 알 수있었습니다!

MSDN의 An Introduction to C# Generics도이 문제를 다루지 않았습니다.

+1

일반 제목이나 구조체의 인스턴스 생성자 작성 _ 필요하다면 동일한 정적 구문이 물론'정적 '생성자에 사용됩니다. ** 생성자 **는 사람들이'new' 객체 표현식을 작성할 때 실행되는 메소드와 같은 멤버입니다. –

답변

8

생성자에 꺾쇠 괄호 (<>)가 없어야합니다.

public class DAL_Base<T> where T : IDisposable, new() 
{ 
    public DAL_Base() 
    { 
    } 
} 
+0

나를 이길 수있어! :) – CodingGorilla

+0

아 사람! 너무 간단했습니다. 나는 결코 그것을 시도하지 않았다. 감사. – jp2code

6

당신은 당신의 생성자에서 제네릭 형식 인수하지 말았어야 :

public DAL_Base() { 
    var listOfObjects = new List<T>(); 
    } 
:

당신이 유형 인수 클래스 자체를 장식했기 때문에
public class DAL_Base<T> where T : IDisposable, new() { 

    public DAL_Base() { // <= this should work 
    // initialize items that will be used in all derived classes 
    } 

} 

, 유형이 생성자에서 사용할 수를

+0

그건 정확히 제가하고 싶은 일종의 것입니다! – jp2code

4

public DAL_Base() { // <= NO ERROR HERE :)

클래스는 일반적으로 constru CT는 그렇지 않습니다. 만들 수없는 생성자에 추가 제네릭 매개 변수를 추가하려고했습니다.

관련 문제