Как реализовать интерфейс IComparable и перегрузить операции отношения? - C# (194411)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите, пожалуйста, с заданием:

Выполнить задание 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();
        }
    }
 
}
А вот задание к 9-ому: Описать базовый класс Строка. Обязательные поля класса: • поле для хранения символов строки; • значение типа ushort для хранения длины строки в байтах. Реализовать обязательные методы следующего назначения: • конструктор без параметров; • конструктор, принимающий в качестве параметра строковый литерал; • конструктор, принимающий в качестве параметра символ; • метод получения длины строки; • метод очистки строки (сделать строку пустой). Описать производный от Строка класс Десятичная_строка. Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Десятичная_строка принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число. Для класса определить следующие методы: • конструктор, принимающий в качестве параметра число; • арифметическая разность строк; • проверка на больше (по значению); • проверка на меньше (по значению).
Помогите хоть чем нибудь) Дайте комментарии, чтобы составить программу.

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы