Struct

Bem eu programo em java e agora estou apredendo c# e tenho algumas dúvidas, bem eu não conheço a estrutura struct
no livro fala que struct é tratada como tipo valor é isso mesmo…? bem eu gostaria de saber também a principal diferença
entre struct e classe, eu também criei um manespace com uma classe e uma struct mais como eu faço pra chamar meu struct em outra classe em outro arquivo…?? vou deixar o código para ficar mais fácil o entendimento:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for Teste
/// </summary>
///

namespace Propriedades
{

   public  struct Tamanho
    {
        //campos
        public int altura, largura;

        //propriedade altura

        int altura
        {
            get
            {
                return altura;
            }

            set
            {
                altura = value;

            }
        }
    }

    public class Teste
    {
     
        public Teste()
        {

        }
    }

}

Eu não estou conseguindo chamar essa struct Tamanho em outra classe como eu faço…?? a classe estou chamando facilmente dessa forma:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Propriedades;

public partial class Testes_Testes : System.Web.UI.Page
{
  
    protected void Page_Load(object sender, EventArgs e)
    {
       
    }
}

importei meu manespace que se chama propriedades dessa forma posso usar todas as classes
públicas isso é igual do java mais em java e package, mais essa struct como eu uso isso qual
sua vantagem…??

Não vejo problema algum em fazer o que tu esta sugerindo:

CodeFile1.cs

namespace LALALA { struct Teste { private int altura, largura; public Teste(int _altura, int _largura) { altura = _altura; largura = _largura; } public int Altura { set{ altura = value; } } public override string ToString() { return "TESTE{ altura = " + altura + ", largura = " + largura + " }"; } } }

Program.cs

[code]using System;
using System.Collections.Generic;
using System.Text;
using LALALA;

namespace ConsoleApplication1
{
class A
{
Teste teste;

    public A() { teste = new Teste(10, 20); }

    public Teste getTeste() { return teste; }

    public void show() { Console.WriteLine("Classe A: " + teste); }
}

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        Teste t = a.getTeste();
        t.Altura = 99;

        Console.WriteLine("Main    : " + t);

        a.show();

        Console.Read();
    }
}

}[/code]

Para entender a diferença entre struct e class, troque a palavra struct por class e rode este exemplo de novo :wink:

Cara pelo que eu vi no livro a diferença entre classe e struct e que classe é tratado como tipo por referência isto é neste caso não acessamos seu valor diretamente e sim seu endereço na mémoria, já por valor acessamos direto na memoria que implica em uma consulta muito mais rápida, isso pode ser uma chave para uma melhor performace, que pena que nosso java não tem esse recurso…!

vc não tem esse recurso em java somente porque em java ele não tem esse nome… Há como simular isso, só não vejo muita utilidade. Se vc quer algo legal em .NET que não há em java ainda, procure por LINQ…rs

Simular um tipo com vários atributos que não seja objeto (em Java)? Estou curioso…
Tente alocar em memória 10.000 objetos de uma só vez e compare o mesmo
feito utilizando o struct (uma simples declaração de vetor funciona).
É, Puppets, tb acho uma pena que não tenha isto em Java…

pq? Para utilizar da feature para código estruturado?

Cara a vantagem que vejo é a seguinte, em java quando vc cria em objeto
você cria tipos por referência que armazenam uma referência ou endereço para o valor atual. Com struct você armazena dados em memória, quando utilizamos uma variável do tipo referência não estarmos acessando seu valor diretamente, mas sim um endereço referente ao seu valor, ao contrário do tipo valor que permite acesso direto ao seu conteúdo diante disso, devemos considerar que a manipulação de variáveis do tipo valor oferece uma performace superior do tipo referência e em java não conheço nada similar a struct.

Em performance, sim, tudo bem, isso é irremediável até onde sei, mas em virtude disso a gente torna o código altamente estruturado, concorda? Jogar a maior parte da OO fora tornando o sistema anêmico?

Cara creio que não, se a struct for bem utilizada ai tudo bem, vc não
vai substituir uma classe por uma struct de forma alguma, mais
creio que tudo depende de um contexto, pode ter caso que uma aplicação
não seja necessario a implementação de uma struct, mas em outros casos sim
vejo a utilização da struct em alguns casos como :
1°- Se vc prescisa de um objeto que deve atuar como tipo primitivo.
2º -Se o objeto não prescisa herdar outro
3º- Se o objeto é passado frequentemente como parâmetro entre métodos,
Isso evitará cópias em memória entre as chamadas, que geralmente penalizam
a performace.

Acho uma pena java não ter esse rercuso, outro recurso que sinto falta e poder herdar mais de uma classe, fora outras coisas que com o tempo vou percebendo.

Q q tem a ver uma coisa com outra? Vc já não tem tipos primitivos no Java?
Vou ficar sofrendo só pra ser xiita?