#c# #oop
#c# #ооп
Вопрос:
namespace DateTimeExpress
{
public class Today
{
private DateTime _CurrentDateTime;
public class Month
{
public int LastDayOfCurrentMonth
{
get
{
return DateTime.DaysInMonth( _CurrentDateTime.Year, _CurrentDateTime.Month);
}
}
}
public Today()
{
}
}
}
Как я могу получить доступ к _CurrentDateTime
Комментарии:
1. Итак, что бы вы хотели
new Today.Month().LastDayOfCurrentMonth
оценить? Обратите внимание, что в нем не был создан ни одинToday
экземпляр, и в нем нет ни одного_CurrentDateTime
поля для чтения.
Ответ №1:
Вы можете увидеть пример, объясняющий вашу проблему, в руководстве по программированию на C # в абзаце «Вложенные типы«, где говорится:
Вложенный или внутренний тип может получить доступ к содержащему или внешнему типу. Чтобы получить доступ к содержащему типу, передайте его как конструктор вложенному типу.
По сути, вам нужно передать ссылку на контейнер (класс Today) в конструкторе вложенного класса (класс Month)
public class Today
{
private DateTime _CurrentDateTime;
private Month _month;
public int LastDayOfCurrentMonth { get { return _month.LastDayOfCurrentMonth; }}
// You can make this class private to avoid any direct interaction
// from the external clients and mediate any functionality of this
// class through properties of the Today class.
// Or you can declare a public property of type Month in the Today class
private class Month
{
private Today _parent;
public Month(Today parent)
{
_parent = parent;
}
public int LastDayOfCurrentMonth
{
get
{
return DateTime.DaysInMonth(_parent._CurrentDateTime.Year, _parent._CurrentDateTime.Month);
}
}
}
public Today()
{
_month = new Month(this);
_CurrentDateTime = DateTime.Today;
}
public override string ToString()
{
return _CurrentDateTime.ToShortDateString();
}
}
И вызовите его чем-то вроде этого
Today y = new Today();
Console.WriteLine(y.ToString());
Console.WriteLine(y.LastDayOfCurrentMonth);