У меня есть следующие файлы в моей базе кода:C# - 'Double' неоднозначная ссылка
StandardUnits.Numbers.Double
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace StandardUnits.Numbers
{
public class Double : Number<double>
{
public Double(double value) : base(value) { }
public static implicit operator Double(double value) { return new Double(value); }
public static implicit operator double(Double value) { return value._value; }
}
}
и
StandardUnitsTest.Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using StandardUnits;
using StandardUnits.Numbers;
namespace StandardUnitsTest
{
class Program
{
static void Main(string[] args)
{
Equatable<string> str = "Hello! This is my number: ";
Number<float> n = 4;
Double o = 5.5;
Float p = n + o;
Console.WriteLine(str + p.ToString());
Console.Read();
}
}
}
По какой-то причине, с помощью «Double» производит следующее сообщение об ошибке:
Error 1 'Double' is an ambiguous reference between 'double' and 'StandardUnits.Numbers.Double' 16 13
Но нет такой ошибки не производится для «Поплавок», который производится идентичным образом, чтобы «Двойной» (но с «поплавком» вместо «двойного», очевидно). Почему компилятор способен различать StandardUnits.Numbers.Float
и float
, но не между StandardUnits.Numbers.Double
и double
? Почему чувствительность к регистру не мешает этому?
Я могу предоставить фрагменты кода для номера и поплавка, если это необходимо.
Невежество. Сначала я попытался сделать «Float» и понял, что этого не существует, поэтому я сделал свой собственный. Затем попробовал то же самое с «Двойным». ;) – weberc2
Не беспокойтесь. Я однажды сделал свой собственный класс строк. Намного хуже. – nathan
Кроме того, моя собственная оболочка, которая наследуется от общего класса обертки «Numbers». – weberc2