Пишу реализацию списка:
using System;
using System.Collections.Generic;
namespace Lists
{
/// <summary>
/// Позволяет выводить на экран строковые представления объектов.
/// </summary>
public class Structure
{
/// <summary>
/// Возвращает строковое предсталение объекта.
/// </summary>
/// <returns>string</returns>
public string ToString(string s)
{
string result = String.Format("{0}: ", this.GetType().Name);
var props = GetType().GetProperties();
for(var i = 0; i < props.Length; i++)
{
if (i < props.Length - 1)
{
result += String.Format("{0} = {1}, ", props[i].Name, props[i].GetValue(this));
}
else
{
result += String.Format("{0} = {1}", props[i].Name, props[i].GetValue(this));
}
}
return result;
}
/// <summary>
/// Возвращает строковое предсталение объекта.
/// </summary>
/// <returns>string</returns>
public override string ToString()
{
return ToString("");
}
}
/// <summary>
/// Узел списка.
/// </summary>
public class ListNode<Value> : Structure
{
/// <summary>
/// Значение узла.
/// </summary>
public Value V { get; set; }
/// <summary>
/// Ссылка на следующий узел.
/// </summary>
public ListNode<Value> Next { get; set; }
public ListNode(Value val)
{
V = val;
}
/// <summary>
/// Выводит строковое представление объекта на экран.
/// </summary>
public void Print()
{
Console.WriteLine(ToString());
}
/// <summary>
/// Выводит строковое представление объекта на экран и переходит на новую строку.
/// </summary>
public void Println()
{
Console.WriteLine(ToString());
}
}
/// <summary>
/// Узел, содержащий ссылку на предыдущий узел.
/// </summary>
public class ListNode2<Value> : ListNode<Value>
{
/// <summary>
/// Предыдущий узел.
/// </summary>
public ListNode2<Value> Previous { get; set; }
public ListNode2(Value val)
{
V = val;
}
}
/// <summary>
/// Базовый класс списков.
/// </summary>
public class BaseList<Value>
{
protected int _Count;
/// <summary>
/// Количество элементов списка.
/// </summary>
public int Count
{
get
{
return _Count;
}
}
public BaseList()
{
}
}
/// <summary>
/// Список.
/// </summary>
public class List<Value> : BaseList<Value>
{
private ListNode<Value> _Head;
/// <summary>
/// Голова списка.
/// </summary>
public ListNode<Value> Head
{
get
{
return _Head;
}
}
public List()
{
}
/// <summary>
/// Возвращает строковое предсталение объекта.
/// </summary>
/// <returns>string</returns>
public string ToString(string s)
{
string result = "";
ListNode<Value> n = _Head;
while (n != null)
{
result += n.ToString(s);
n = n.Next;
}
return result;
}
/// <summary>
/// Возвращает строковое предсталение объекта.
/// </summary>
/// <returns>string</returns>
public string ToString()
{
return ToString("");
}
/// <summary>
/// Выводит строковое представление объекта на экран.
/// </summary>
public void Print()
{
Console.WriteLine(ToString());
}
/// <summary>
/// Выводит строковое представление объекта на экран и переходит на новую строку.
/// </summary>
public void Println()
{
Console.WriteLine(ToString());
}
/// <summary>
/// Добавляет элемент в список.
/// </summary>
public void Add(ListNode<Value> node)
{
node.Next = _Head;
_Head = node;
_Count += 1;
}
/// <summary>
/// Удаляет первый элемент списка.
/// </summary>
public void Remove()
{
if (_Head != null)
{
_Head = _Head.Next;
}
}
}
}
Как исправить ошибку с конструктором в строке 92:
Lists.ListNode не содержит конструктор, который принимает 0 аргументов (CS1729) - C:\Ilya\AlgoРитмы\Задачи по программированию - AlgoРитмы [полностью проверено]\C#\Lists\Lists\MyClass.cs:92,10
?
Надо сделать так, чтобы на вход конструктора подавалось Value val, которое записывалось в свойство V.
Ошибка говорит о том, что у вас нет у класса ListNode
конструктора без параметров. Если посмотреть конструктор класса ListNode2
, то он неявно требует пустой конструктор без параметров для класса ListNode
, так как ListNode2
является наследником ListNode
и при объявлении конструктора опущено ключевое слово base.
Это значит при создании объекта-наследника будет вызываться пустой конструктор для создания базового объекта.
Измените конструктор класса ListNode2
таким образом
public ListNode2(Value val)
: base(val)
{
V = val;
}
Тем самым, вы явно вызываете нужный конструктор у базового класса с аргументом(а не пустой конструктор).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хочу написать второй метод ToString(Object obj) через лямбда выражение:
Хочу массиву кнопкам, из 10 кнопок передать в событие OnClick метод Appropriation(i), с аргументом i, который будет увеличиватьсяСуть: кнопка 1 имеет OnClick...