Size: a a a

2021 January 29

E

EgorBo in pro.net
это уже деталь реализации рантайма, рантайм может через хип это все равно делать
источник

E

EgorBo in pro.net
чтобы виртуальный метод вызвать
источник

A

Aloraman in pro.net
Тут скорее вопрос, считается ли Dispose() в A прямой реализацией [System.Private.CoreLib]System.IDisposable::Dispose()
источник

E

EgorBo in pro.net
но вообще к чему вопрос - ты видишь боксинг в асме?
источник

IC

Ilya Chernoudov in pro.net
EgorBo
это уже деталь реализации рантайма, рантайм может через хип это все равно делать
When a callvirt method instruction has been prefixed by constrained thisType, the instruction is executed as follows:

If thisType is a reference type (as opposed to a value type) then ptr is dereferenced and passed as the 'this' pointer to the callvirt of method.

If thisType is a value type and thisType implements method then ptr is passed unmodified as the 'this' pointer to a call method instruction, for the implementation of method by thisType.

If thisType is a value type and thisType does not implement method then ptr is dereferenced, boxed, and passed as the 'this' pointer to the callvirt method instruction.
источник

IC

Ilya Chernoudov in pro.net
EgorBo
это уже деталь реализации рантайма, рантайм может через хип это все равно делать
на моне будет бокс?
источник

E

EgorBo in pro.net
да
источник

E

EgorBo in pro.net
по-моему даже если метод переопределен
источник

IC

Ilya Chernoudov in pro.net
EgorBo
по-моему даже если метод переопределен
🤔 а как там дженерики работают?
источник

IC

Ilya Chernoudov in pro.net
или они тоже боксятся?
источник

E

EgorBo in pro.net
если это value type
источник

IC

Ilya Chernoudov in pro.net
EgorBo
если это value type
но там такая же последовательность вызовов
источник

E

EgorBo in pro.net
Ilya Chernoudov
но там такая же последовательность вызовов
?
источник

IC

Ilya Chernoudov in pro.net
EgorBo
если это value type
сорян, то есть в моно вот тут будет боксинг?
public void M2<T>(T item) where T:IDisposable
   {
   item.Dispose();
   }
источник

E

EgorBo in pro.net
Ilya Chernoudov
сорян, то есть в моно вот тут будет боксинг?
public void M2<T>(T item) where T:IDisposable
   {
   item.Dispose();
   }
что тут Т ?
источник

IC

Ilya Chernoudov in pro.net
EgorBo
что тут Т ?
структура
источник

E

EgorBo in pro.net
тогда да
источник

IC

Ilya Chernoudov in pro.net
EgorBo
тогда да
хуя, как так?
источник

E

EgorBo in pro.net
а схуяли нет?
источник

A

Aloraman in pro.net
Если в A сделать вместо public void Dispose() -> void IDisposable.Dispose()?
В IL то там .override method instance void [System.Private.CoreLib]System.IDisposable::Dispose() у метода торчит
Тогда вроде по спеке выходит что constraint callvirt должно в call преобразоваться даже в Моно, не?
источник