2013-08-01 2 views
2

저는 새로운 .NET 개발자입니다. C#의 staticclass이 인스턴스화되어야하는지 여부를 알고 싶습니다.C# 정적 클래스를 인스턴스화해야합니까?

public static class ConnectionHelper 
{ 
    public static SqlConnection GetConnection() 
    { 
     return new SqlConnection(ConfigurationManager.ConnectionStrings["connection"].ToString()); 
    } 
} 

내 C# 응용 프로그램에서이 클래스의 인스턴스를 다음과 같은 오류가 점점 오전 :

The name 'ConnectionHelper' does not exists in the current context

관련 코드 :

using (var cn = ConnectionHelper.GetConnection()) 
{ 
    ... 
} 

를 바랍니다 나는 데이터베이스 연결을위한 class을 생성 권하다.

+0

ConnectionHelper 클래스를 정의한 곳은? –

+7

아마도 호출 코드는 다른 네임 스페이스에 있습니다. 'ConnectionHelper'를 선언하는 네임 스페이스가 호출 사이트에서 알려 지도록 코드에'using' 절을 추가해야합니다. 또는 호출 사이트에서 정규화 된 이름을 사용하십시오 (네임 스페이스와 클래스 이름을 구분하는 점들과 함께). – Sebastian

+0

@Sebastian 당신이 맞습니다 –

답변

1

네임 스페이스가 누락 된 것 같습니다.

"사용"- 블록에 ConnectionHelper의 네임 스페이스를 추가하십시오. 예를 들어 : http://msdn.microsoft.com/en-us/library/wkze6zky(v=vs.80).aspx 을하고 그 후 - 블록을 "사용"하는 네임 스페이스를 추가합니다

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using ConnectionHelperNamespace; 

별도의 프로젝트에 정의 된 정적 클래스는, 다음 프로젝트 탐색기에서에 refernce를 추가합니다.

+0

하지만 다른 오류가 발생합니다 : "ConnetionHelper '형식 또는 이름 공간을 찾을 수 없습니다 (지시문과 어셈블리 참조가 누락되었습니다)" –

+0

@amankhan 파일 맨 위 'ConnectionHelper'는'ConnectionHelper'를 사용하고자하는 파일에서'Some.Text.Here' 부분을'using' 문에 넣었던 부분입니다. –

+0

As ConnectionHelper가 클래스 이름이고 네임 스페이스 이름이 아님을 볼 수 있습니다 ... – sickUnit

0

당신은 "공공 정적 클래스"의 satic을 제거하여이 시도 할 수 있습니다 : 일부 비 정적 속성이나 방법을 추가 할

public class ConnectionHelper 
{ 
    public static SqlConnection GetConnection() 
    { 
     return new SqlConnection(ConfigurationManager.ConnectionStrings["connection"].ToString()); 
    } 
} 

그것은 작동하지만 전에 인스턴스가 아무 것도 할 수 없다.

3

아니요, static class은 인스턴스화 할 필요가 없습니다. 을 인스턴스화 할 수 없습니다. 즉, 클래스 선언에있는 static 키워드의 요점입니다.

당신도 인스턴스화하지 않습니다. 당신이하는 일은 정적 클래스에서 정적 메서드를 호출하는 것입니다. 그리고 괜찮습니다. 그러나 클래스를 인스턴스화하려면 new 키워드가 필요합니다.

컴파일하기 위해 파일 상단에 using 지시문이 누락되었을 수 있습니다.

+0

맞습니까? 지시문을 맨 위에 추가하는 방법을 알려주십시오. –

+0

ConnectionHelper 클래스의 네임 스페이스는 무엇입니까? 이름이 클래스를 사용하는 코드 부분의 네임 스페이스 이름과 같지 않으면 "using namespacename;"을 입력해야합니다. 파일 상단에 다른 사용법이 있습니다. – nvoigt

+0

네임 스페이스는 파일 이름과 동일합니다. 제 질문에서 볼 수 있습니다. –

0

클래스는 다양한 작업을 수행하는 상태 저장 객체를 만듭니다. 이를 위해서는 객체를 선언하고 인스턴스화해야합니다.

static 클래스/메소드는 상태 비 저장을 의미합니다. 대부분 우리는 단지 static 메소드를 에 받고 싶습니다., 작업은의 반환 값/상태 인을 수행해야합니다.

클래스 데이터 멤버가 필요한 중간 결과를 저장하지 않아야합니다.

따라서 간단히 말해 static class은 인스턴스화되지 않습니다!

+0

다음을 사용하는 데 오류가 발생하는 이유 : using ConnectionHelper;
오류 형식 또는 네임 스페이스 이름 'ConnectionHelper'을 (를) 찾을 수 없습니다 (사용 지시문 또는 어셈블리 참조가 누락 되었습니까?) –

+0

코드를 추가하십시오. 'using '도 포함 시키십시오. –

관련 문제