Переполнение стека при создании экземпляра класса - C#
Формулировка задачи:
Здравствуйте. Изучаю C#, решил попробовать создать дерево классов. Базовый абстрактный класс - мебель(имеет материал и вес), от него два производных: стол(добавляет площадь поверхности) и стул(количество ножек). Вроде бы ничего сложного нет, но появились проблемы. Во-первых, в С++ можно было сделать так:
class MyClass : private BaseClass
Здесь уже такого нет, то есть наследование всегда public?
Во-вторых, при попытке создать экземпляр класса возникает переполнение стека. Вот код:
Первый файл
Второй файл
Исключение возникает при попытке вызова базового конструктора... Не подскажите, что я делаю не так? Заранее спасибо
using System; using System.Collections.Generic; using System.Linq; using System.Text; using MyNewFile; namespace tempSharp { class Program { static void Main(string[] args) { CTable Table1 = new CTable(50.0, TMaterial.glass, 40.0); CChair Chair = new CChair(4, TMaterial.wood, 20.0); CTable Table2 = new CTable(40.0, TMaterial.plastic, 15.0); Console.WriteLine(Table1.ToString()); Console.WriteLine(Table2.ToString()); Console.WriteLine(Chair.ToString()); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; #region TMaterial public enum TMaterial { wood, plastic, glass }; #endregion namespace MyNewFile { //Класс мебели #region CFurniture public abstract class CFurniture { public TMaterial m_Material { get { return m_Material; } protected set { m_Material = value; } } public double m_Weight { get { return m_Weight; } protected set { if(value>0.0) m_Weight = value; } } public CFurniture(TMaterial NewMaterial, double NewWeight) { m_Material = NewMaterial; m_Weight = NewWeight; } } #endregion //Стол #region CTable public class CTable : CFurniture { public double m_AreaSurface { private set { if(value>0.0) m_AreaSurface = value; } get { return m_AreaSurface; } } public CTable(double NewAreaSurface, TMaterial NewMaterial, double NewWeight) : base(NewMaterial, NewWeight) { m_AreaSurface = NewAreaSurface; } public override string ToString() { return string.Format("Стол, площадь поверхности = {0}, материал - {1}, вес = {2}", m_AreaSurface, m_Material, m_Weight); } } #endregion //Стул #region chair public class CChair : CFurniture { public byte m_Legs { private set { if ((value > 2) && (value < 5)) m_Legs = value; } get { return m_Legs; } } public CChair(byte NewLegs, TMaterial NewMaterial, double NewWeight) : base(NewMaterial, NewWeight) { m_Legs = NewLegs; } public override string ToString() { return string.Format("Стул, кол-во ножек = {0}, материал - {1}, вес = {2}", m_Legs, m_Material, m_Weight); } } #endregion }
Решение задачи: «Переполнение стека при создании экземпляра класса»
textual
Листинг программы
public double m_AreaSurface { private set { if(value>0.0) m_AreaSurface = value; } get { return m_AreaSurface; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д