다른 네임 스페이스의 부분 클래스
다른 네임 스페이스에 부분 클래스를 만들 수 있습니까? 제대로 작동합니까? 전의:
class1.cs
namespace name1
{
public partial class Foo
{
Bar1(){
return 10;
}
}
}
class2.cs
namespace name1.name2
{
public partial class Foo
{
Bar2(){
return 100;
}
}
}
main.cs
using name1;
using name1.name2;
namespace mainClass
{
public class mainClass
{
Foo classFoo = new Foo();
int Count = classFoo.Bar1() + classFoo.Bar2();
// Will Count = 110?
}
}
작동하려면 어떻게해야합니까? (내 예가 올바르지 않은 경우)
클래스의 이름은 그래서, 그것의 네임 스페이스를 포함 name1.Foo하고 name1.name2.Foo두 개의 완전히 분리 된 유형이다. 따라서 귀하의 질문에 대한 짧은 대답은 아니오입니다.
왜 이렇게해야합니까?
부분 클래스는 동일한 네임 스페이스와 동일한 어셈블리에서만 가능합니다.
네임 스페이스는 두 개의 다른 어셈블리에있을 수 있지만 부분 클래스는 그렇지 않습니다.
부분 클래스를 구현하는 동안 고려해야 할 몇 가지 사항은 다음과 같습니다.
부분 클래스의 각 부분에 부분 키워드를 사용하십시오.
부분 클래스의 각 부분의 이름은 동일해야하지만 부분 클래스의 각 부분에 대한 소스 파일 이름은 다를 수 있습니다.
부분 클래스의 모든 부분은 동일한 네임 스페이스에 있어야합니다.
부분 클래스의 각 부분은 동일한 어셈블리 또는 DLL에 있어야합니다. 즉, 다른 클래스 라이브러리 프로젝트의 소스 파일에 부분 클래스를 만들 수 없습니다.
부분 클래스의 각 부분은 동일한 액세스 가능성을 갖습니다. (비공개, 공개 또는 보호)
부분 클래스의 클래스 또는 인터페이스를 상속하면 부분 클래스의 모든 부분에서 상속됩니다.
부분 클래스의 일부가 봉인되면 전체 클래스가 봉인됩니다.
부분 클래스의 일부가 추상이면 전체 클래스가 추상 클래스로 간주됩니다.
작동하지 않습니다. 컴파일러는 줄에 모호한 이름 오류를 제공합니다 Foo classFoo = new Foo();. 부분 클래스가 작동하려면 네임 스페이스가 실제로 형식의 정규화 된 이름의 일부이므로 동일한 네임 스페이스에 있어야합니다.
또한 정적 클래스의 경우 정적 기능을 사용 하는 새로운 C # 6.0의 도움으로 이와 같은 것을 구현할 수 있습니다 .
중히 여기다:
namespace SomeLogic1
{
public static class Util
{
public static int Bar1()
{
return 1;
}
}
}
namespace SomeLogic2
{
public static class Util
{
public static int Bar2()
{
return 2;
}
}
}
namespace GeneralStuff
{
using SomeLogic1;
using SomeLogic2;
public class MainClass
{
public MainClass()
{
// Error CS0104
// 'Util' is an ambiguous reference between 'SomeLogic1.Util' and 'SomeLogic2.Util'
var result = Util.Bar1() + Util.Bar2();
}
}
}
맞습니다, 컴파일되지 않고 오류 메시지가 명확합니다. 상황을 해결하기 위해 네임 스페이스를 직접 지정할 수 있습니다 (하지만 내가 이해하는 한 이것을 원하지 않습니다).
namespace GeneralStuff
{
public class MainClass
{
public MainClass()
{
var result = SomeLogic1.Util.Bar1() + SomeLogic2.Util.Bar2();
}
}
}
또는 다음과 같이 정적 기능을 사용하여 적용 할 수 있습니다 .
namespace GeneralStuff
{
using static SomeLogic1.Util;
using static SomeLogic2.Util;
public class MainClass
{
public MainClass()
{
var result = Bar1() + Bar2();
}
}
}
일부 도우미 / 유틸리티 클래스에 대해이 작업을 수행하는 것이 좋습니다. 그러나 부분 클래스는 다른 사람들이 알아 차린 것처럼 방법이 아닙니다.
MSDN https://msdn.microsoft.com/en-us/library/wa80x488.aspx의 부분 클래스 및 메서드에 대한 제한
참고 URL : https://stackoverflow.com/questions/4504288/partial-class-in-different-namespaces
'IT Share you' 카테고리의 다른 글
| Windows 10 개발자 미리보기에서 Bash를 활성화하는 방법은 무엇입니까? (0) | 2020.12.11 |
|---|---|
| InnoDB는 600MB 파일, MyISAM을 몇 분 안에 가져 오는 데 1 시간 이상 걸립니다. (0) | 2020.12.10 |
| 영구 테이블과 동일한 열 및 유형으로 임시 테이블을 만드는 가장 좋은 방법 (0) | 2020.12.10 |
| 해당 값을 기준으로 사전 키를 필터링하는 방법 (0) | 2020.12.10 |
| HRESULT 예외 : 0x800A03EC 오류 (0) | 2020.12.10 |