를 사용하여 기본 생성자를 호출하는 C#
-
08-06-2019 - |
문제
면 기본 클래스에서 상속하고 전달하려면에서 무언가를 생성자의 상속받은 클래스를 생성자의 기본 클래스가 어떻게 할까요?
예를 들어,
면에서 상속 예외 클래스고 싶은 다음과 같은 것이 가능합니다.
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
{
//This is where it's all falling apart
base(message);
}
}
기본적으로 내가 원하는 것은 전달할 수 있도록 하는 문자열은 메시지 기본 제외 클래스입니다.
해결책
수정 생성자를 다음을 호출하여 기본 클래스에 제대로 생성자:
public class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extrainfo) : base(message)
{
//other stuff here
}
}
참고로 생성되지 않은 뭔가를 호출할 수 있는 언제든지 내 방법입니다.그 이유는 당신의 오류에 당신의 통화에서 생성자체.
다른 팁
참고하는 데 사용할 수 있는 static 방법 내에서 호출하여 기본 생성자입니다.
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo) :
base(ModifyMessage(message, extraInfo))
{
}
private static string ModifyMessage(string message, string extraInfo)
{
Trace.WriteLine("message was " + message);
return message.ToLowerInvariant() + Environment.NewLine + extraInfo;
}
}
를 호출해야 하는 경우에는 기본 생성자를 그러나지 않기 때문에 바로 새로운(유래)등 필요한 데이터를 조작,최고의 솔루션 리조트 공장 방법입니다.당신이해야 할 무엇을 표시하는 것입니다 프라이빗 파생 생성자를,다음 정 클래스의 메소드 수행하는 데 필요한 모든 재료하고 나중에 생성자를 호출하고 반환한다.
public class MyClass : BaseClass
{
private MyClass(string someString) : base(someString)
{
//your code goes in here
}
public static MyClass FactoryMethod(string someString)
{
//whatever you want to do with your string before passing it in
return new MyClass(someString);
}
}
그것은 진정한 사용 base
(뭔가)를 기본 클래스 생성자를 호출하지만,경우에는 과부하 사용 this
키워드
public ClassName() : this(par1,par2)
{
// do not call the constructor it is called in the this.
// the base key- word is used to call a inherited constructor
}
// Hint used overload as often as needed do not write the same code 2 or more times
public class MyExceptionClass : Exception
{
public MyExceptionClass(string message,
Exception innerException): base(message, innerException)
{
//other stuff here
}
}
전달할 수 있습니다 내면의 예외 중 하나로 생성자입니다.
서 Design Guidelines 고 FxCop 규칙이 있습니다.:
1.사용자 지정 예외가 있어야 이름으로 끝나는 예외
class MyException : Exception
2.예외를 공개
public class MyException : Exception
3. CA1032:예외를 구현하는 표준이 생성자입니다.
- 공공턴 생성자입니다.
- Public 생성자나 문자열이다.
- Public 생성자나 문자열을 제외(수 있는 포장 또 다른 예외).
Serialization 생성자를 보호가 없는 경우는 밀폐 및 개인하는 경우 형식이 밀봉된다.에 따라 MSDN:
[Serializable()] public class MyException : Exception { public MyException() { // Add any type-specific logic, and supply the default message. } public MyException(string message): base(message) { // Add any type-specific logic. } public MyException(string message, Exception innerException): base (message, innerException) { // Add any type-specific logic for inner exceptions. } protected MyException(SerializationInfo info, StreamingContext context) : base(info, context) { // Implement type-specific serialization constructor logic. } }
나
[Serializable()]
public sealed class MyException : Exception
{
public MyException()
{
// Add any type-specific logic, and supply the default message.
}
public MyException(string message): base(message)
{
// Add any type-specific logic.
}
public MyException(string message, Exception innerException):
base (message, innerException)
{
// Add any type-specific logic for inner exceptions.
}
private MyException(SerializationInfo info,
StreamingContext context) : base(info, context)
{
// Implement type-specific serialization constructor logic.
}
}
할 수도 있습니다 하는 조건부 확인 매개변수에서 생성할 수 있는 유연성.
public MyClass(object myObject=null): base(myObject ?? new myOtherObject())
{
}
나
public MyClass(object myObject=null): base(myObject==null ? new myOtherObject(): myObject)
{
}
class Exception
{
public Exception(string message)
{
[...]
}
}
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
: base(message)
{
[...]
}
}
public class MyException : Exception
{
public MyException() { }
public MyException(string msg) : base(msg) { }
public MyException(string msg, Exception inner) : base(msg, inner) { }
}
따라의 일부 다른 답변 여기에 나열되어,전달할 수 있습니다 매개변수로 기본 클래스 생성자입니다.그것은 권고 전화하는 기본 클래스 생성자의 시작 부분에서 생성자를 위한 상속된 클래스입니다.
public class MyException : Exception
{
public MyException(string message, string extraInfo) : base(message)
{
}
}
나는 당신의 예를 만든 적용 extraInfo
매개변수,그래서 가정할 수 있습을 연결 extraInfo
문자열을 매개 변수 Message
시설의 예외는(그것이 무서 허용되는 답변 및 코드에 당신의 질문에).
이것은 단순히 달성을 호출하여 기본 클래스 생성자 및 그 후 업데이트 메시지의 속성을 추가 정보입니다.
public class MyException: Exception
{
public MyException(string message, string extraInfo) : base($"{message} Extra info: {extraInfo}")
{
}
}