C#에서,당신은 당신을 호출해야의 기본 생성자?
-
09-06-2019 - |
문제
C#,가 있는 경우에는 상속받은 클래스는 기본 생성자,나를 명시적으로 호출한 기본 클래스의 생성자 또는 그것은 암시적으로 호출?
class BaseClass
{
public BaseClass()
{
// ... some code
}
}
class MyClass : BaseClass
{
public MyClass() // Do I need to put ": base()" here or is it implied?
{
// ... some code
}
}
해결책
당신이 필요하지 않습을 명시적으로 호출하여 기초 생성자,그것이 암시적으로 호출됩니다.
확장의 예금 및 콘솔 응용 프로그램을 만들고 확인할 수 있습니다 이 행동은 자신을 위해:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyClass foo = new MyClass();
Console.ReadLine();
}
}
class BaseClass
{
public BaseClass()
{
Console.WriteLine("BaseClass constructor called.");
}
}
class MyClass : BaseClass
{
public MyClass()
{
Console.WriteLine("MyClass constructor called.");
}
}
}
다른 팁
그것은 묵시적,제공 그것은 매개 변수가 없는.이 때문에 당신 를 구현할 필요가 생성자 하는 값, 참조 코드는 아래 예를 들어:
public class SuperClassEmptyCtor
{
public SuperClassEmptyCtor()
{
// Default Ctor
}
}
public class SubClassA : SuperClassEmptyCtor
{
// No Ctor's this is fine since we have
// a default (empty ctor in the base)
}
public class SuperClassCtor
{
public SuperClassCtor(string value)
{
// Default Ctor
}
}
public class SubClassB : SuperClassCtor
{
// This fails because we need to satisfy
// the ctor for the base class.
}
public class SubClassC : SuperClassCtor
{
public SubClassC(string value) : base(value)
{
// make it easy and pipe the params
// straight to the base!
}
}
그것은 묵시적으로 기본 매개 변수가 없는 생성자,그러나 그것은 필요한 기본값에서는 현재 등급:
public class BaseClass {
protected string X;
public BaseClass() {
this.X = "Foo";
}
}
public class MyClass : BaseClass
{
public MyClass()
// no ref to base needed
{
// initialise stuff
this.X = "bar";
}
public MyClass(int param1, string param2)
:this() // This is needed to hit the parameterless ..ctor
{
// this.X will be "bar"
}
public MyClass(string param1, int param2)
// :base() // can be implied
{
// this.X will be "foo"
}
}
그것은 묵시적으로 사용됩니다.
파생 클래스에 내장되어 기본 클래스입니다.당신이 그것에 대하여 생각하는 경우,베이스 객체를 인스턴스화하기 전에 메모리에서 파생된 클래스가 추가될 수 있습니다.그래서 기본 개체가 만들어가는 길에 만들기 유사한 모델이다.그래서,당신은하지 않는 생성자를 호출.
AFAIK,당신을 호출해야의 기본 생성자 전달해야 하는 경우 어떤 값이다.
당신이 필요하지 않 통화의 기본 생성자를 명시적으로 그것이 암시적으로 호출하지만,때때로 당신은 필요한 매개 변수를 전달에서 생성자 하는 경우에 당신이 무언가를 할 수 있 다음과 같:
using System;
namespace StackOverflow.Examples
{
class Program
{
static void Main(string[] args)
{
NewClass foo = new NewClass("parameter1","parameter2");
Console.WriteLine(foo.GetUpperParameter());
Console.ReadKey();
}
}
interface IClass
{
string GetUpperParameter();
}
class BaseClass : IClass
{
private string parameter;
public BaseClass (string someParameter)
{
this.parameter = someParameter;
}
public string GetUpperParameter()
{
return this.parameter.ToUpper();
}
}
class NewClass : IClass
{
private BaseClass internalClass;
private string newParameter;
public NewClass (string someParameter, string newParameter)
{
this.internalClass = new BaseClass(someParameter);
this.newParameter = newParameter;
}
public string GetUpperParameter()
{
return this.internalClass.GetUpperParameter() + this.newParameter.ToUpper();
}
}
}
참고:만약 누군가가 알고있는 더 나은 솔루션을 주시기 바랍 알려줍니다.
제휴하지 않습니다 StackOverflow