Let’s say you have yourself a class like the following:
public sealed class StringToInt {
private string _myString;
private StringToInt(string value)
{
_myString = value;
} public static implicit operator int(StringToInt obj)
{
return Convert.ToInt32(obj._myString);
}
public static implicit operator string(StringToInt obj)
{
return obj._myString;
}
public static implicit operator StringToInt(string obj)
{
return new StringToInt(obj);
}
public static implicit operator StringToInt(int obj)
{
return new StringToInt(obj.ToString());
}
}
Will you then be able to write code like the following:
MyClass.SomeMethodThatOnlyTakesAnInt(aString);
without it stating that there is no implicit cast from string to int?
[Yes, i could test it myself but i thought i would put it out there and see what all of the gurus have to say]
I am fairly certain this is not possible under C# 3.0. The sections in the reference that covers conversions is 6.4. Namely, 6.4.4 “User-defined implicit conversions”.
It only talks about conversions from S->T (and not S->T->U) which covers the cases such as:
and
Where both of these cases only involve S->T (twice).
I am pretty sure this is not possible in C# 3.0.
Allowing S->T->U would require much more work to be performed by the type matcher, at least following the algorithm specified.