代码之家  ›  专栏  ›  技术社区  ›  Sembei Norimaki

子类抱怨父类构造函数[重复]

c#
  •  -1
  • Sembei Norimaki  · 技术社区  · 4 年前

    然后我创建一个子类,并使用一个带on参数的构造函数。

    其思想是DeviceA的构造函数重写GenericDevice的构造函数

    Error   CS7036  There is no argument given that corresponds to the required formal parameter 'address' of 'GenericDevice.GenericDevice(string)' 
    

    class GenericDevice {
        GenericDevice(string address){
        
        }
        void Connect() {
        }
    }
    
    class DeviceA : GenericDevice
    {
        DeviceA(string address) {
    
        }
        void Foo() {
        }
    }
    
    2 回复  |  直到 4 年前
        1
  •  0
  •   ToeplitzToeplitz    4 年前
    class GenericDevice
    {
        public GenericDevice()
        {
    
        }
        public GenericDevice(string address)
        {
    
        }
        void Connect()
        {
        }
    }
    
    class DeviceA : GenericDevice
    {
        public DeviceA(string address) : base(address)
        {
            // calls the GenericDevice(string address) Constructor
        }
    
    
        public DeviceA(string address, int number) : base()
        {
            // calls the GenericDevice() Constructor
        }
    
        void Foo()
        {
        }
    }
    
        2
  •  0
  •   Infosunny    4 年前

    按如下方式修复代码:

    class GenericDevice
    {
        protected GenericDevice(string address)
        {
        }
    
        void Connect()
        {
        }
    }
    
    class DeviceA : GenericDevice
    {
        DeviceA(string address) : base(address)
        {
        }
    
        void Foo()
        {
        }
    }
    

    https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-constructors

    因此,您也可以这样更改代码:

    class GenericDevice
    {
        protected GenericDevice()
        {
        }
    
        GenericDevice(string address)
        {
        }
    
        void Connect()
        {
        }
    }
    
    class DeviceA : GenericDevice
    {
        DeviceA(string address)
        {
        }
    
        void Foo()
        {
        }
    }