Articles of boxe

Detalhes sobre o que acontece quando uma estrutura implementa uma interface

Recentemente, deparei com essa questão do Stackoverflow: Quando usar o struct? Nele, havia uma resposta que dizia algo um pouco profundo: Além disso, perceba que quando uma estrutura implementa uma interface – como faz o Enumerator – e é convertida para esse tipo implementado, a estrutura se torna um tipo de referência e é movida […]

Quando uma declaração de uso coloca seu argumento, quando é uma estrutura?

Eu tenho algumas dúvidas sobre o seguinte código: using System; namespace ConsoleApplication2 { public struct Disposable : IDisposable { public void Dispose() { } } class Program { static void Main(string[] args) { using (Test()) { } } static Disposable Test() { return new Disposable(); } } } Minhas perguntas são: A instrução using que […]

Existe Boxing / Unboxing ao converter uma estrutura em uma interface genérica?

Duplicar Possível: Estruturas, Interfaces e Boxe No MSDN: http://msdn.microsoft.com/pt-br/library/yz2be5wk.aspx O boxe é o processo de conversão de um tipo de valor para o object de texto ou para qualquer tipo de interface implementado por esse tipo de valor. Mas e as interfaces genéricas? Por exemplo, int deriva de IComparable e IComparable . Digamos que eu […]

Encaixotamento de tipo de object com uma variável de tipo de referência

O boxe é quando um tipo de valor é atribuído a um tipo de object. É o mesmo quando um tipo de referência é atribuído a um object? Quando um tipo (que não é object) é atribuído, o que acontece? Isso é boxe também? int num=5; object obj = num; //boxing ////////////////////// MyClass my = […]

Igualdade de referência de tipos de valor

Eu fiz alguns testes de palavra-chave ref e há um acho que não consigo entender: static void Test(ref int a, ref int b) { Console.WriteLine(Int32.ReferenceEquals(a,b)); } static void Main(string[] args) { int a = 4; Test(ref a, ref a); Console.ReadLine(); } Por que esse código exibe False ? Eu sei que int é um tipo […]

boxe e unboxing em int e string

Estou um pouco confuso no boxe e no unboxing. De acordo com sua definição Boxe é conversão implícita de ValueTypes para Tipos de Referência (Object). UnBoxing é conversão explícita de Tipos de Referência (Object) para seus ValueTypes equivalentes. o melhor exemplo para descrever isso é int i = 123; object o = i; // boxing […]

Por que não delegar o trabalho de contravenção com tipos de valor?

Este trecho não é compilado no LINQPad. void Main() { (new[]{0,1,2,3}).Where(IsNull).Dump(); } static bool IsNull(object arg) { return arg == null; } A mensagem de erro do compilador é: Nenhuma sobrecarga para ‘UserQuery.IsNull (object)’ corresponde ao delegado ‘System.Func’ Ele funciona para uma matriz de strings, mas não funciona para int[] . É aparentemente relacionado ao […]

Interfaces genéricas em C # impedem o boxe? (Desempenho do .NET vs Mono)

Eu tenho uma interface c # com determinados parâmetros de método declarados como tipos de object . No entanto, o tipo real passado pode diferir dependendo da class que implementa a interface: public interface IMyInterface { void MyMethod(object arg); } public class MyClass1 : IMyInterface { public void MyMethod(object arg) { MyObject obj = (MyObject) […]

C # – Problemas com ints boxe / unboxing / typecasting. Eu não entendo

Estou tendo dificuldade em entender isso. Considere o seguinte exemplo: protected void Page_Load(object sender, EventArgs e) { // No surprise that this works Int16 firstTest = Convert.ToInt16(0); int firstTest2 = (int)firstTest; // This also works object secondTest = 0; int secondTest2 = (int)secondTest; // But this fails! object thirdTest = Convert.ToInt16(0); int thirdtest2 = (int)thirdTest; […]

Como uma restrição genérica impede o boxe de um tipo de valor com uma interface implicitamente implementada?

Minha pergunta é um pouco relacionada a esta: Interface explicitamente implementada e restrição genérica . Minha pergunta, no entanto, é como o compilador permite que uma restrição genérica elimine a necessidade de encaixotar um tipo de valor que implemente explicitamente uma interface. Eu acho que minha pergunta se resume a duas partes: O que está […]