C # Заставить подклассы реализовать статический метод - PullRequest
0 голосов
/ 08 марта 2019

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

Чтобы методы были согласованными, я хотел создать интерфейс или суперкласс.Есть ли возможный способ принудительного применения подклассов для реализации статического метода?

(Offtopic: возможно ли также применение подклассов для перегрузки операторов?)

Например:

public class Length
    {...


    public static Length Create(double value, string unitCode)
        {
            var length = new Length();

            switch (unitCode)
            {
                case "Mm":
                    length.Megameters = value;
                    break;
                case "Km":
                case "km":
                    length.Kilometers = value;
                    break;
                case "hm":
                    length.Hectometers = value;
                    break;
                case "dam":
                    length.Decameters = value;
                    break;
                case "m":
                    length.Meters = value;
                    break;
                case "dm":
                    length.Decimeters = value;
                    break;
                case "cm":
                    length.Centimeters = value;
                    break;
                case "mm":
                    length.Millimeters = value;
                    break;
                case "µm":
                    length.Micrometers = value;
                    break;
                case "pm":
                    length.Picometers = value;
                    break;
                case "in":
                    length.Inches = value;
                    break;
                case "ft":
                    length.Feet = value;
                    break;
                case "yd":
                    length.Yards = value;
                    break;
                case "mi":
                    length.Miles = value;
                    break;
                case "smi":
                    length.ScandinavianMiles = value;
                    break;
                case "ly":
                    length.LightYears = value;
                    break;
                case "NM":
                    length.NauticalMiles = value;
                    break;
                case "ftm":
                    length.Fathoms = value;
                    break;
                case "fur":
                    length.Furlongs = value;
                    break;
                case "ua":
                    length.AstronomicalUnits = value;
                    break;
                case "pc":
                    length.Parsecs = value;
                    break;
                default:
                    throw new ArgumentException("Not a valid unit given.", nameof(unitCode));
            }
            return length;
        }
... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...