2009-06-06 5 views
1

MustInherit (C#에서는 # abstract)은 세 가지 방법이 있으며 모두가 Shared으로 정의 된 VB.NET 클래스를보고 있습니다. C#의 static). 클래스에는 속성이나 필드가 없으며 세 가지 메서드 만 있습니다. OO 관점에서 볼 때 이것은 의미가 있습니까?MustInherit 및 공유 함수

내 생각 그것 때문에 MustInherit함으로써, 아니, 당신은 기본적으로이 클래스의 인스턴스를 만들 수 없습니다 말을하는지 - 당신이 그것을 상속과 의 인스턴스를 생성해야합니다 클래스를 파생. 그러나 모든 메소드가 공유되기 때문에 어쨌든 부모 클래스의 인스턴스를 만들지 않으므로 MustInherit은 좋지 않습니다. 너도 마찬가지로 이 아니고으로 표시하고 MustInherit으로 표시하고 원할 때마다 상속받을 수 있습니다.

이런 식으로 클래스를 만드는 것이 의미가있는 상황이 있습니까?

답변

2

의 인스턴스를 결코 있도록 C#에서

+0

모듈을 네임 스페이스 내에서 자동으로 가져옵니다. 모듈을 사용하지 않을 수도 있습니다. – jmoreno

0

OO 관점에서 볼 때 이것은 의미가 없습니다.

그러나 VB에서는 C#처럼 클래스를 Shared로 플래그하는 방법이 없습니다. C#에서는이 클래스를 static class으로 플래그 지정할 수 있습니다. MustInherit은 기본적으로 정적 클래스 임에도 불구하고 사람들이 인스턴스를 만들지 못하도록하기 위해 추가되었을 가능성이 큽니다. 이

+0

VB에서 클래스를 선언하면 기본적으로 C#에서 정적으로 선언됩니다. 그것은 VB7 이후에있었습니다. –

0

클래스는 정적 (= 공유)로 선언, 나는 해결 방법으로는 추상적 인 (경우 MustInherit)로 표시되도록 VB.NET는 것을 허용하지 않습니다 생각 될 수있다 다른 사람들이 말했듯이, 그들은 C# 정적 클래스를 정말로 원했던 것처럼 들립니다. VB는 "정적"에 해당하는 "공유"이지만 VB에서는 "공유"클래스를 표시 할 수 없습니다. 차이점은 누군가이 클래스에서 상속 받아 인스턴스를 만들 수 있다는 것입니다. C# 정적 클래스는 봉인됩니다.

무엇이 이되어야합니까?이 완료되면 Module을 사용합니다. VB Module 및 C# 정적 클래스는 사실상 동일합니다. 멤버는 인스턴스가 아닌 형식과 연결되어 있으므로 인스턴스에서 상속 할 수 없습니다.