2009-02-04 2 views
6

이것은 바보 같은 질문 일 수 있습니다.하지만 VB.net의 유형과 인스턴스에서 공유 할 수있는 방법을 사용할 수있는 이유는 무엇입니까? C# 정적 메서드와 동일하다고 가정하는 것이 잘못 되었습니까?VB.net과 C#의 정적 액세스 가능성의 차이점, 이유는 무엇입니까?

MyClass.MySharedMethod() 

dim mc as new MyClass() 
mc.MySharedMethod() 

왜이 작업을 수행 할 수 있습니까? 가능한 이점은 이것에 있습니다.이 일을 볼 수있는 모든 것은 인텔리 센스를 사용할 때 사람들을 혼란스럽게합니다. 이것이 고전 VB6의 일부 컨벤션과 관련이 있다고 확신하는 이유는 .NET에이 문제를 제기하는 이유입니다.

답변

17

네, 기본적으로 VB6의 숙취입니다. Java로도이 작업을 수행 할 수 있지만 요즘 대부분의 IDE가 내가 믿는 요즘 경고합니다.

네, 정말 좋은 생각입니다. 그 중 가장 명백한 예가 Thread.Sleep입니다.

Dim t as new Thread(...) 
t.Sleep(1000) 

어떤 스레드가 잠자기 상태입니까? 현재의 것. 도!

+1

글쎄, VB6 클래스에서 공유 하위/기능을했다. 어떻게 이것이 숙취 일 수 있습니까? –

+1

예를 좋아합니다 – JaredPar

+0

@Konrad : 재미 있습니다. 나는 이전 버전과의 호환성에 대해 (얼마전에) 들었다. 이상하다면 ... –

2

이것은 어리석은 질문 일 수 있습니다.하지만 VB.net의 유형 및 인스턴스에서 공유 할 수있는 방법은 무엇입니까? 제가 C# 정적 메서드와 동일하다고 가정하는 것이 잘못 되었습니까?

이들은 동일합니다. VB 은 인스턴스에서 사용하려고하면 경고하지만 금지되지는 않습니다. 이것은 아마도 동적 타이핑 및 후기 바인딩과 관련이 있습니다. 정확한 타입을 모른 채 늦은 바운드 객체 ​​(Object)가 있다고 상상해보십시오. 그 클래스의 정적 메서드를 호출하면 어떻게 될까요?

내가 아는 한, 이것은 C#에서는 가능하지 않습니다 (리플렉션에 의지하지 않고). Option Strict Off의 VB에서는 객체의 인스턴스 메서드로 간단하게 호출 할 수 있습니다.

+1

그렇다면 금지되지 않은 이유는 무엇입니까? 그들이 경고하면 나쁜 생각을한다는 것을 알고 있습니다. – dfasdljkhfaskldjhfasklhf

+0

+1 [확인] (http://ideone.com/Nuag3y) –

+0

@ kingfrito_5005'Static' 키워드는 VB에 존재하지만 완전히 다른 것입니다 (C#이 지원하지 않는 지역 변수의 수명을 조절합니다). OP가 요청한 ('static' 메쏘드) 것을 위해서, VB에서'Shared'는 C#에서'static'과 같습니다. –

관련 문제