Как реализовать интерфейс 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);
}
}