C #에서 동일한 클래스의 다른 생성자에서 오버로드 된 생성자를 호출 할 수 있습니까?
C #에서 동일한 클래스의 다른 생성자에서 오버로드 된 생성자를 호출 할 수 있습니까?
아니요, C #의 다른 생성자에서 생성자를 호출 할 수있는 유일한 위치는 생성자 바로 다음에 ":"바로 뒤에 있습니다. 예를 들어
class foo
{
public foo(){}
public foo(string s ) { }
public foo (string s1, string s2) : this(s1) {....}
}
C #에서 ctor chaining을 수행 할 수 있다면 대답은 그렇습니다. 질문 이 이미 요청되었습니다.
그러나 주석에서 보이는 것처럼, 실제로 묻고 싶은 것은 ' 사전 / 사후 처리를 통해 다른 생성자 내 에서 오버로드 된 생성자를 호출 할 수 있습니까 ?'입니다.
C #에는이를위한 구문이 없지만 일반적인 초기화 함수를 사용하여이 작업을 수행 할 수 있습니다 (ctor 체인을 지원하지 않는 C ++에서와 같이).
class A
{
//ctor chaining
public A() : this(0)
{
Console.WriteLine("default ctor");
}
public A(int i)
{
Init(i);
}
// what you want
public A(string s)
{
Console.WriteLine("string ctor overload" );
Console.WriteLine("pre-processing" );
Init(Int32.Parse(s));
Console.WriteLine("post-processing" );
}
private void Init(int i)
{
Console.WriteLine("int ctor {0}", i);
}
}
편집 : 원래 게시물에 대한 의견에 따르면 이것은 C # 질문입니다.
짧은 대답 : 예 this
. 키워드를 사용합니다 .
긴 대답 : 예, this
키워드를 사용하면 여기에 예가 있습니다.
class MyClass
{
private object someData;
public MyClass(object data)
{
this.someData = data;
}
public MyClass() : this(new object())
{
// Calls the previous constructor with a new object,
// setting someData to that object
}
}
C #에서는 메서드 본문 내부에서 다른 생성자를 호출 할 수 없습니다. foo (args) : base ()는 다음과 같이 기본 생성자를 호출 할 수 있습니다. 같은 클래스에서 다른 생성자를 호출 할 수도 있습니다 : foo (args) : this ().
기본 생성자를 호출하기 전에 무언가를하고 싶을 때, 기본의 구성은 클래스가 외부의 것들에 의존하는 것 같습니다. 그렇다면 기본 클래스의 속성이나 이와 유사한 것을 설정하는 것이 아니라 기본 생성자의 인수를 사용해야합니다.
'Programing' 카테고리의 다른 글
비밀번호없이 생성 된 OpenSSH 개인 키에 비밀번호를 추가하려면 어떻게합니까? (0) | 2020.05.13 |
---|---|
numpy dtype을 기본 파이썬 유형으로 변환 (0) | 2020.05.13 |
주어진 날짜의 정확한 주 번호를 얻으십시오 (0) | 2020.05.13 |
Mac에 gitk 설치 (0) | 2020.05.13 |
AngularJS는 숨겨진 필드 값을 보내지 않습니다 (0) | 2020.05.13 |