2013-08-10 4 views
0

예를 들어 정적하지 RegistryKey 같은 클래스가 존재한다 :.net 생성자없이 정적이 아닌 클래스를 만드는 방법? .NET에서

RegistryKey RK=Registry.LocalMachine; 

위의 클래스는 정적되지 않습니다 (지금까지의 내가 이해를) 아직 예를 들어 생성자가 없습니다

RegistryKey RK=new RegistryKey(); 

가 유효하지 않습니다

내가 웹을 검색 및 SO 아직 내가 어떤 정보를 찾을 수 없습니다 (레지스트리 키 클래스는 정의 된 생성자가 없습니다)

나는 MyClass2.MyClass2를 얻을 다음

class MyClass2 
{ 
    protected MyClass2(int x) 
    { 
    } 
} 

에 액세스 할 수없는 쓸 때 때문에이 보호 레벨의에

어떻게 생성자는 개인이 수 제작 이외의 다른 방법이없는 경우 내가 정말 알고 싶은 것은 RegisteryKey 및 MyClass2와 같은 클래스의 메시지가 다를 수 있습니까?

답변

1

RegistryKey에는 매개 변수가있는 두 개의 개인 생성자가 있습니다. 아마도 오류 메시지는 기본 생성자 RegistryKey()이 없기 때문일 수 있습니다. 매개 변수가있는 생성자를 정의하면 암시 적 매개 변수가없는 생성자가 생성되지 않기 때문입니다. 비공개로 설정하면 볼 수 없습니다.

기술적으로 추상 클래스는 new으로 만들 수 없습니다. 그런 다음 개인 파생 클래스 (또는 내부 파생 클래스)를 만들 수 있습니다.

+0

@xanstos 코드 예제를 제공해주십시오. –

+1

@ ψευδή 정확히 무엇입니까? 'Registry.LocalMachine'이 어떻게 가능할까요? – xanatos

+0

예, 제발 ..... EXTRA "의견은 길이가 15 자 여야합니다" –

1

아래 클래스 중 하나가 정적이거나 추상이 아니며 생성자가 내부 (이 경우)이므로 ClassA 인스턴스를 만들 수 없습니다. ClassB는 물론 클래스가 동일한 어셈블리의 일부이며 호출자에게 반환 할 수 있기 때문에 ClassA의 인스턴스를 만들 수 있습니다.

public class ClassA 
{ 
    internal ClassA() 
    { 
     // Internal default constructor. 
    } 

    public void GetDateTime() 
    { 
     Console.WriteLine(DateTime.Now.ToString()); 
    } 

} 

public class ClassB 
{ 
    public ClassA GetClassA() 
    { 
     ClassA obj = new ClassA(); 
     return obj; 
    } 


} 

ClassA 인스턴스는 ClassB를 통해 도달 할 수 있습니다.

 ClassB objB = new ClassB(); 
     ClassA objA = objB.GetClassA(); 
     objA.GetDateTime(); 
+0

대단히 감사합니다. –