У меня есть следующий код:
namespace FVProductions.Base
{
public struct Color
{
public byte B, G, R, A;
public Color(float r, float g, float b, float a)
{
R = (byte)(Math.Min(1.0f, Math.Max(0.0f, r)) * 255);
G = (byte)(Math.Min(1.0f, Math.Max(0.0f, g)) * 255);
B = (byte)(Math.Min(1.0f, Math.Max(0.0f, b)) * 255);
A = (byte)(Math.Min(1.0f, Math.Max(0.0f, a)) * 255);
}
public Color(Vector3 rgb)
:this(rgb.X,rgb.Y,rgb.Z,1)
{
}
}
}
namespace FVProductions.Base.Graphics
{
public class ShaderParameter<T>
{
private T Value;
public T GetValue() { return Value; }
}
}
namespace FVProductions.NewGame
{
public class TerrainShader : Shader, IFullTextured, IStandardLit
{
private ShaderParameter<Vector3> epAmbient;
public FVProductions.Base.Color AmbientColor
{
get { return new FVProductions.Base.Color(epAmbient.GetValue()); }
set { epAmbient.SetValue(value.ToVector3()); }
}
}
}
Тип FVProductions.Base.Color находится в указанной библиотеке. epAmbient.GetValue возвращает Vector3, а FVProductions.Base.Color имеет конструктор с одним параметром Vector3. Проект не ссылается на System.Drawing. Однако компилятор генерирует следующую ошибку:
ошибка CS0012: тип «System.Drawing.Color» определен в сборке, на которую нет ссылок. Необходимо добавить ссылку на сборку «System.Drawing, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a».
Это в строке TerrainShader.AmbientColor get {} по ключевому слову return. Почему компилятор может предположить, что явно объявленный тип - это другой?