KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Inspired by Units of Measure in F# , and despite asserting ( here ) that you couldn't do it in C#, I had an idea the other day which I've been playing around with. namespace UnitsOfMeasure { public interface IUnit { } public static class Length { public interface ILength : IUnit { } public class m : ILength { } public class mm : ILength { } public class ft : ILength { } } public class Mass { public interface IMass : IUnit { } public class kg : IMass { } public class g : IMass { } public class lb : IMass { } } public class UnitDouble<T> where T : IUnit { public readonly double Value; public UnitDouble(double value) { Value = value; } public static UnitDouble<T> operator +(UnitDouble<T> first, UnitDouble<T> second) { return new UnitDouble<T>(first.Value + second.Value); } //TODO: minus operator/equality } } Example usage: var a = new UnitDouble<Length.m>(3.1); var b = new UnitDouble<Length.m>(4.9); var d = new UnitDouble<Mass.kg>(3.4); Console.WriteLine((a + b).Value); //Console.WriteLine((a + c).Value); <-- Compiler says no The next step is trying to implement conversions (snippet): public interface IUnit { double toBase { get; } } public static class Length { public interface ILength : IUnit { } public class m : ILength { public double toBase { get { return 1.0;} } } public class mm : ILength { public double toBase { get { return 1000.0; } } } public class ft : ILength { public double toBase { get { return 0.3048; } } } public static
Tags (comma-separated)
Save Edits
Cancel