2012-03-12 1 views
3

C# 용 라이브러리를 작성하고 있습니다. C# 프로젝트에서 라이브러리를 사용하는 경우 메서드/필드 만 사용할 수 있는지 궁금하고 Visual Basic 같은 다른 .NET 언어에서 사용되는 경우 메서드에 액세스 할 수 없습니다. 이유는 안전하지 않은 코드에만 유용한 일부 함수/필드가 있기 때문입니다. 아무런 용도로 사용되지 않으면 Visual Basic에서 사용할 수있는 경우 다소 바보가됩니다.조건부 코드는 언어를 기반으로합니까?

활용되는 언어에 따라 특정 클래스/방법/필드 만 사용할 수 있습니까? 그렇지 않다면 두 가지 별도 어셈블리를 다운로드 할 수 있습니다. 즉 C# 용과 VB.Net 용 어셈블리가 있습니다. 또는 관계없이 추가 메서드를 간단하게 포함 할 수 있습니다 (그러나 포인터와 안전하지 않은 코드에 익숙하지 않은 사용자와의 혼동을 막기 위해 안전하지 않은 메서드를 실수로 사용하거나 실수로 무언가를 수행하는 것을 방지하기 위해 사용하고 싶습니다. 정말로 중요하지 않습니다!).

감사합니다.

+0

안전하지 않은 코드는 CLS와 호환되지 않으므로 VB.Net에서 코드를 호출 할 수 없습니다. 나는 F #에 대해 전혀 모른다. 따라서 관리되는 C++ 사용자가 포인터를 사용하지 못하도록 방지 할 수 있습니다. 이것은 조금 중복 된 것 같습니다. 당신의 목표는 무엇입니까? – IanNorton

+0

인터페이스. 인터페이스. 인터페이스. ;-) –

답변

2

활용되는 언어에 따라 특정 클래스/방법/필드 만 사용할 수 있습니까?

번호

내가 포인터와 안전하지 않은 코드에 익숙하지 않은 사람들과의 혼동을 방지하기 위해 단지 안전하지 않은 방법으로 장난 실수 어리석은 일을하고 사용자가 유지하고 싶습니다.

추상화를 사용하십시오. 인터페이스/기본 클래스가있는 어셈블리를 만들고 일부 구현 자에게 안전 구현 및 다른 소비자와 어셈블리를 함께 제공하고 고급 어셈블리 기능을 제공하는 다른 어셈블리와 함께 어셈블리를 만듭니다.

또는 내부 메서드가있는 어셈블리를 하나 사용하고 "고급"어셈블리에서이를 소비하는 경우 InternalsVisibleToAttribute를 사용할 수 있습니다.

+0

안전하지 않은 컨텍스트가 다른 .NET 언어의 어셈블리를 사용하는 것과 어떻게 관련이 있는지 알 수 없습니다. 호기심에서 벗어나 뭔가 빠졌습니까? –

+0

묻힌 것을 할 방법이 없습니다. 다른 대안을 제안했습니다. 클라이언트가 사용하는 .NET 언어가 아닌 클라이언트의 신뢰 정도에 따라 다른 클라이언트에게 다른 어셈블리 (축소 된 API가있는 어셈블리)를 제공합니다. –

+1

오, 아니, 나는 그것을 깨닫는다.내가 묻는 것은 안전하지 않은 컨텍스트가 다른 .NET 언어로 어셈블리를 사용할 수 없도록 만드는 것입니다 (OP가 생각한 것처럼). –

0

내가 아는 한, 모든 사람이 일리노이 어쨌든 (또는 오히려 컴파일 된 지침이지만 무엇이든) 일어나는 시간이 있기 때문에, 당신 중 하나를 호출하는 어셈블리의 언어를 결정할 방법이 없습니다.

이 경우 최상의 조건은 조건에 따라 두 가지 버전의 어셈블리를 컴파일하고 사용하는 언어에 따라 사용자에게 제공하는 것입니다. 또는 모든 코드를 포함하고 VB 사용자에게 일부 기능에 액세스하지 말라고 할 수 있습니다.

여기 내가 할 수있는 일이 확실하지 않다고 확신해야합니다. 발신자에게 안전하지 않은 내용이 있습니다. 어떤 IntPtr 님 또는 무엇인가?

+0

IntPtr 's 좋은 생각입니다. – Alex