Тип Ограничения параметров - нет универсальных (или ближайшего предложения!) - PullRequest
2 голосов
/ 18 января 2012

Я думаю, что то, что я хочу сделать, невозможно, но подумал, что все равно спрошу. Я имею в виду реализацию какого-то пользовательского преобразования между различными метрическими измерениями, например, преобразование дюймов в метры и другие единицы.

Я думаю, базовый класс называется Unit следующим образом. ПРИМЕЧАНИЕ. Я не указывал ни одного поля для хранения количества единиц, например, 2 метра, 5 дюймов и т. Д .:

public abstract class Unit {
    protected string _name;
    public Unit(string name)
    {
        _name = name;
    }
}

Затем подклассы единиц измерения в метрах и дюймах:

public class Metre : Unit {
    public Metre() : base("Metre")
    {
    }
}

public class Inch : Unit {
    public Metre() : base("Inch")
    {
    }
}

Я хотел бы иметь класс, который мог бы обрабатывать преобразование этих единиц между собой. Что-то вроде:

public static class UnitConvertor
{
    public Unit Convert(Unit from, Type to) : where Type extends/inherits from Unit
    {
        // do the conversion
        return the instance of Type to;
    }
}

Есть мысли?

1 Ответ

5 голосов
/ 18 января 2012

Если все единицы известны заранее, вы можете использовать оператор неявного преобразования :

public class Metre : Unit 
{
    public Metre() : base("Metre")
    {
    }

    public static implicit operator Inch(Metre m)  
    { 
        return new Inch(39.37 * m.Value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...