Есть ли способ заставить мой новый класс имитировать поведение int или любого типа Valuetype?
Я что-то хочу, поэтому эти задания действительны
MyClass myClass = 1;
int i = myClass;
var x = myClass; // And here is important that x is of type int!
MyClass выглядит примерно так
public class MyClass {
public int Value{get;set;}
public int AnotherValue{get;set;}
public T GetSomething<T>() {..}
}
Каждое присвоение MyClass должно возвращать переменную Value
как тип int.
Пока я нашел implicit operator int
и implicit operator MyClass (int value)
. Но этого недостаточно.
Я хочу, чтобы MyClass
действительно вел себя как int. Итак, var i = myClass
позволяет i
быть целым числом.
Это вообще возможно?
var x = myClass; // And here is important that x is of type int!
Я не думаю, что это когда-нибудь полетит. - person spender   schedule 15.11.2017implicit operator int
? - person Sinatr   schedule 15.11.2017var x = myClass
из-за того, чтоx
относится к типуint
, не запускается. - person Matthew Watson   schedule 15.11.2017var x = myClass
. TBH, для меня нет особого смысла пытаться это сделать ... Если подумать о вариантах использования, он неявно конвертируется в int, поэтому может использоваться (в большинстве случаев) вместо int. ОП, почему ты хочешь, чтобы это было так? - person spender   schedule 15.11.2017public static implicit operator int(MyClass instance) { return instance.Value; }
так чтоMyClass myClass = 1;
действительно - person CanereCurrere   schedule 15.11.2017public static implicit operator int(MyClass b)
, ноx
по-прежнему будет иметь типMyClass
. - person HimBromBeere   schedule 15.11.2017int
(вид перечисления, но с настраиваемыми методами), и он работает: я могу назначить int, и я могу использовать экземпляр класса как int в выражениях. Я не совсем понимаю, что вы имеете в виду. Другой вопрос, что не работает для OP,implicit operator
- это то, что нужно. - person Sinatr   schedule 15.11.2017var x = myClass
, x никогда не будет ничем иным, кроме типаmyClass
. - person DavidG   schedule 15.11.2017GetSomething<T>
и хранить некоторую другую информацию в этом классе, но если я хочу «работать» с этим классом, это должно быть так, как если бы я работал с int. - person CanereCurrere   schedule 15.11.2017((MyClass)someInt).SomeMethod()
илиMyClass someVar = someInt; someVar.SomeMethod();
- person Sinatr   schedule 15.11.2017int
. Подход хорош только в том случае, если оба типа могут быть преобразованы друг в друга без каких-либо потерь. Или, если вас не волнует, какие другие свойства будут иметь значение по умолчанию. - person Sinatr   schedule 15.11.2017