Используйте метод другого класса в моей форме - PullRequest
0 голосов
/ 29 августа 2018

Добрый день,

Итак, у меня есть класс, который преобразует арабские цифры в римские. У меня есть цикл, который выполняется, если пользователь выбрал «арабский» (арабский) в раскрывающемся списке. Если пользователь выбрал «römisch» (римский), я хочу сделать тот же цикл, но преобразовать цифры в римский. В следующем вы можете увидеть код обоих классов. Как лучше всего инициализировать метод класса «ArabicToRoman» в моем цикле для преобразования чисел в римские?

namespace Friedhof_Generator
{
    class ArabicToRoman
    {
        private string[] Tausender = 
            { "", "M", "MM", "MMM" };
        private string[] Hunderter = 
            { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
        private string[] Zehner =
            { "", "X", "XX", "XXX", "XL", "L", "LX" , "LXX", "LXXX", "XC" };
        private string[] Einer =
            { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };

        private string ArabicRoman(int arabic)
        {
            if (arabic >= 4000)
            {
                int tausend = arabic / 1000;
                arabic %= 1000;
                return "(" + ArabicRoman(tausend) + ")" +
                    ArabicRoman(arabic);
            }

            string result = "";

            int num;
            num = arabic / 1000;
            result += Tausender[num];
            arabic %= 1000;

            num = arabic / 100;
            result += Hunderter[num];
            arabic %= 100;

            num = arabic / 10;
            result += Zehner[num];
            arabic %= 10;

            result += Einer[arabic];

            return result;
        }
    }
}

Выше класса ArabicToRoman. Ниже класс с петлями.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Friedhof_Generator
{
    public partial class frm_Grabnummer : Form
    {
        public frm_Grabnummer()
        {
            InitializeComponent();

            ddl_Feld.Items.Add("Arabisch");
            ddl_Feld.Items.Add("Römisch");
            ddl_Feld.Items.Add("Alphabetisch");

            ddl_Reihe.Items.Add("Arabisch");
            ddl_Reihe.Items.Add("Römisch");
            ddl_Reihe.Items.Add("Alphabetisch");

            ddl_Nr.Items.Add("Arabisch");
            ddl_Nr.Items.Add("Römisch");
            ddl_Nr.Items.Add("Alphabetisch");
        }

        private void ddl_Feld_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        private void btn_Start_Click(object sender, EventArgs e)
        {
            int FeldVon, FeldBis, ReiheVon, ReiheBis, NrVon, NrBis;
            string Friedhof;

            FeldVon = int.Parse(tb_Von_Feld.Text);
            FeldBis = int.Parse(tb_Bis_Feld.Text);
            ReiheVon = int.Parse(tb_Von_Reihe.Text);
            ReiheBis = int.Parse(tb_Bis_Reihe.Text);
            NrVon = int.Parse(tb_Von_Nr.Text);
            NrBis = int.Parse(tb_Bis_Nr.Text);
            Friedhof = tb_Friedhof.Text;

            if (ddl_Feld.Text == "Arabisch")
            {
                for (int iFeld = FeldVon; iFeld <= FeldBis; iFeld++)
                {
                    for (int iReihe = ReiheVon; iReihe <= ReiheBis; iReihe++)
                    {
                        for (int iNr = NrVon; iNr <= NrBis; iNr++)
                        {
                            lb_Ausgabe.Items.Add(string.Format("{0} - {1} - {2} - {3}", Friedhof, iFeld, iReihe, iNr));
                        }
                    }
                }
            }
            else if(ddl_Feld.Text == "Römisch")
            {

            }
        }
    }
}

1 Ответ

0 голосов
/ 29 августа 2018

Класс ArabicToRoman выглядит как типичный вспомогательный класс, в прошедшие дни вы просто сделали его общедоступным и статичным

public static class ArabicToRoman
{
    private static string[] Tausender =  { "", "M", "MM", "MMM" };
    private static string[] Hunderter = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
    private static string[] Zehner = { "", "X", "XX", "XXX", "XL", "L", "LX" , "LXX", "LXXX", "XC" };
    private static string[] Einer = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };

    public static string Convert(int arabic)
    {
        ...
    }
}

Usage

Вы можете вызвать это из любого места, где есть доступ к сборке

ArabicToRoman.Convert(234);

Вы также можете просто сделать ваши классы и методы общедоступными

public class ArabicToRoman
{
    private string[] Tausender =  { "", "M", "MM", "MMM" };
    private string[] Hunderter = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
    private string[] Zehner = { "", "X", "XX", "XXX", "XL", "L", "LX" , "LXX", "LXXX", "XC" };
    private string[] Einer = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };

    public string Convert(int arabic)
    {
        ...
    }
}

Использование

Еще раз вы вызываете это везде, где есть доступ к сборке, в которой он находится

var converter = new ArabicToRoman();
converter.Convert(345);

Однако в наши дни существует большой толчок для Внедрение зависимостей DI и Сервисная архитектура. Вы можете сделать это одноэлементным Сервисом и внедрить ваши конвертеры. Однако это спорно, а также.

Для вашего случая и вашего уровня понимания статические классы или создаваемый класс кажутся подходящими


Дополнительная литература

статический (C # Reference)

Используйте модификатор static, чтобы объявить статический член, который принадлежит сам тип, а не конкретный объект. Статический модификатор может использоваться с классами, полями, методами, свойствами, операторами, события и конструкторы, но это не может быть использовано с индексаторами, финализаторы или типы, отличные от классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...