Переполнение стека при создании экземпляра класса - 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;
}
}