Как реализовать интерфейс IComparable и перегрузить операции отношения? - C# (194411)
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, с заданием:А вот задание к 9-ому:
Описать базовый класс Строка.
Обязательные поля класса:
• поле для хранения символов строки;
• значение типа ushort для хранения длины строки в байтах.
Реализовать обязательные методы следующего назначения:
• конструктор без параметров;
• конструктор, принимающий в качестве параметра строковый литерал;
• конструктор, принимающий в качестве параметра символ;
• метод получения длины строки;
• метод очистки строки (сделать строку пустой).
Описать производный от Строка класс Десятичная_строка. Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Десятичная_строка принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число.
Для класса определить следующие методы:
• конструктор, принимающий в качестве параметра число;
• арифметическая разность строк;
• проверка на больше (по значению);
• проверка на меньше (по значению).
Выполнить задание 9, используя для хранения экземпляров разработанных классов стандартные параметризованные коллекции. Во всех классах реализовать интерфейс IComparable и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю.
Вот код к 9-ому заданию. Он правильный и в нем все выполнено.using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { internal class Str { private int bytesize; private string str; // конструктор без параметров public Str() { } // конструктор, принимающий в качестве параметра строковый литерал public Str(string str) { this.str = str; bytesize = (int)str.Length; } // конструктор, принимающий в качестве параметра символ; public Str(char ch) { str = Convert.ToString(ch); bytesize = 1; } // Метод получения длины строки public void SizeDef() { bytesize = str.Length * sizeof(char); } // Метод очищающий стоку. public void Clear() { str = ""; bytesize = 0; } } internal class DecString : Str { // Конструктор для десятичной строки. public DecString(string str) { int x; int.TryParse(str, out x); var sb = new StringBuilder(); bool minus = false; if (x < 0) { sb.Append("-", 0, 0); } x = Math.Abs(x); if (x == 0) { sb.Insert(0, "0"); } else { while (x > 0) { int temp = x % 10; sb.Insert(0, temp.ToString()); x /= 10; } if (minus == true) { sb.Insert(0, "-"); } } bs = sb.ToString(); } public string bs { get; set; } public static DecString operator -(DecString l, DecString r) { int result = Int32.Parse(l.bs) - Int32.Parse(r.bs); return new DecString(string.Format("" + result)); } public static bool operator <(DecString l, DecString r) { int li = Int32.Parse(l.bs); int ri = Int32.Parse(r.bs); return li < ri; } public static bool operator >(DecString l, DecString r) { int li = Int32.Parse(l.bs); int ri = Int32.Parse(r.bs); return li > ri; } public static bool operator ==(DecString l, DecString r) { int li = Int32.Parse(l.bs); int ri = Int32.Parse(r.bs); return li == ri; } public static bool operator != (DecString l, DecString r) { int li = Int32.Parse(l.bs); int ri = Int32.Parse(r.bs); return li != ri; } } public class Program { static void Main(string[] args) { Str[] decStrsArray = new DecString[3]; DecString d1 = new DecString("50"); decStrsArray[0] = d1; DecString d2 = new DecString("10"); decStrsArray[1] = d2; DecString d3 = new DecString("10"); decStrsArray[2] = d3; Console.WriteLine(d2 != d1); Console.ReadLine(); } } }
Помогите хоть чем нибудь)
Дайте комментарии, чтобы составить программу.
Решение задачи: «Как реализовать интерфейс IComparable и перегрузить операции отношения?»
textual
Листинг программы
internal class Str : IComparable<Str> { private int bytesize; private string str; public string S { get { return str; } set { str = value; } } // конструктор без параметров public Str() { } // конструктор, принимающий в качестве параметра строковый литерал public Str(string str) { this.str = str; bytesize = (int)str.Length; } // конструктор, принимающий в качестве параметра символ; public Str(char ch) { str = Convert.ToString(ch); bytesize = 1; } // Метод получения длины строки public void SizeDef() { bytesize = str.Length * sizeof(char); } // Метод очищающий стоку. public void Clear() { str = ""; bytesize = 0; } public int CompareTo(Str other) { return str.CompareTo(other.S); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д