2016-11-01 2 views
0

Я работаю над производным классом, я связал производный класс с родительским классом, я устанавливаю конструктор в производном классе, но получаю сообщение об ошибке «Значения не существуют в текущем контексте» Когда они уже объявлены в родительском классе. В чем причина этого и как его можно исправить?Аргументы для моего базового конструктора отсутствуют?

Родитель класс

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace HousingNameSpace 
{ 
    public abstract class Housing 
    { 
     private int sqFt; 
     private int zip; 
     private int yrBlt; 

     public Housing(int TSqFt, int Tzip, int TyrBlt) 
     { 
      sqFt = TSqFt; 

      zip = Tzip; 
      yrBlt = TyrBlt; 
     } 

     public int SqFt 
     { 

      get { return sqFt; } 

      set { sqFt = value; } 
     } 


    public int ZIP 
    { 

     get { return zip; } 

     set { zip = value; } 



     } 
     public int YrBlt 
     { 
      get{ return yrBlt; } 

      set { yrBlt = value; } 

     } 



     public abstract double GetRentAmmount(); 
    } 
    } 

производный класс

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using HousingNameSpace; 

namespace MultiTennant 
{ 
public class Multi:Housing 
{ 
    private string buildingtype; 
    private int occupants; 

    public string BuildingType 
    { 
     get{ return buildingtype; } 

     set { buildingtype = value; } 

    } 

    public int Occupants 
    { 
     get { return occupants; } 

     set { occupants = value; } 

    } 

    public Multi (string TbuildType) : base (TSqrFt, Tzip,TyrBlt) 
    { } 
} 
} 

ответ

2

Вы должны принять ваши базовые параметры конструктора в классе ребенка конструктора.

public Multi (string TbuildType, int TSqrFt, int Tzip, int TyrBlt) 
    : base (TSqrFt, Tzip,TyrBlt) 

Примечание к стилю: Назовите свои переменные более разборчиво. squareFootage, yearBuilt и т. Д. Позднее вы поблагодарите себя.

О, и я знаю, что это не связано с вопросом вообще (извините), но если я могу сделать другое предложение:

public enum BuildingType 
{ 
    House, 
    Apartment, 
    Condo 
    //etc 
} 

public interface IHousing 
{ 
    int SquareFootage { get; set; } 
    int YearBuilt { get; set; } 
    int ZipCode { get; set; } 
    int MaximumOccupants { get; set; }  
    int MortgageAmount { get; }  
    int RentalIncome { get; } 
    BuildingType BuildingType { get; } 
} 


public class MultiPersonHouse 
    : IHousing 
{ 
    public int SquareFootage { get; set; } 
    public int YearBuilt { get; set; } 
    public int ZipCode { get; set; } 
    public int MaximumOccupants { get; set; } 

    public int MortgageAmount { get; private set; }  
    public int RentalIncome { get; private set;} 
    public BuildingType BuildingType { get; private set;} 

    public MultiPersonHouse(int squareFootage, int yearBuilt /*etc...*/) 
    { 
     //set properties. 
     this.BuildingType = BuildingType.House; 
     this.MortgageAmount = 0; //Free! 
     this.RentalIncome = 0; //Free rent too! 
    } 
} 

А потом по одному для каждого типа жилья. Вероятно, вы захотите сделать MaximumOccupants только. Не хотел бы, чтобы кто-то менял ваше максимальное заполнение.

+0

Спасибо, сэр, ваше абсолютно правильно. – Jonathan

+0

Нет проблем. Пожалуйста, отметьте как принято, если он решит проблему. – Brandon

+0

@poke. Вы совершенно правы ... мой плохой. Не использовал VS для его кодирования. Исправлена – Brandon

Смежные вопросы