Comparando com java

4 respostas
edymrex

Bem eu semprei programei em java e estou com um projeto em c# porém tem algumas particularidades
que eu gostaria de mostrar a vcs e quem souber por favor me explique porque funciona, olhem essa classe:

namespace Testes.Exemplo
{
    
    
    
    /// <summary>
    /// Represent a product category and
    /// contains methods for working with categories
    /// </summary>
    [System.ComponentModel.DataObject]
    public class Category
    {

        private static readonly string _connectionString;

        private int _id;
        private string _title;

        public int CategoryID
        {
            get { return _id; }
            set { _id = value; }
        }

        public string Title
        {
            get { return _title; }
            set { _title = value; }
        }


        static  Category()
        {
            _connectionString = WebConfigurationManager.ConnectionStrings["StoreString"].ConnectionString;
        }
        
        
        public Category(SqlDataReader reader)
        {
            _id = (int) reader["CategoryID"];
            _title = (string) reader["Title"];
        }

        
        
        /// <summary>
        /// Select all category from databaset
        /// </summary>
        /// <returns></returns>
        [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
        public static List<Category> SelectCategory()
        {
            //Initialize command
            SqlConnection con = new SqlConnection(_connectionString);
            SqlCommand cmd = new SqlCommand("dev_SelectAllCategory",con);
            cmd.CommandType = CommandType.StoredProcedure;
            List<Category> results = new List<Category>();
            using(con)
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while(reader.Read())
                {
                    results.Add(new Category(reader));
                }
                
                con.Close();
                return results;
            }
        }
        
        
        

      
    }
}

Minhas dúvidas são as seguintes:

pra que sevre a palavra chave readonly ?
eu posso ter um construtor estatico…? em java isso é possivel…?

4 Respostas

peczenyj

Sobre readonly (parece um const a primeira vista, mas não é):
http://msdn2.microsoft.com/en-us/library/acdd6hb7(VS.71).aspx

Sobre o construtor estático: eu não tinha visto isto até agora, e me surpreendeu, não tinha visto ainda.
http://msdn2.microsoft.com/en-us/library/aa645612(vs.71).aspx

Parece ter a mesma função de um bloco estatico, a primeira vista, porém é mais do que isso.

T

Neste caso, em particular, é fácil.
readonly - nesse contexto, pode ser trocada em Java por “final”.
static Nome_Da_Classe() - em Java existe uma construção equivalente mas não é um “construtor” (aliás nem é isso em C#).
Em Java basta usar:

static {
    ... comandos usados apenas durante a inicialização desta classe, e que
    ... podem se referir apenas a variáveis estáticas:
};
edymrex

valew thingol !
A diferença desse readonly para o final do java que eu vi foi a seguinte:

quando vc atribui um valor em uma variável final em java, ela sempre fica com o valor
já em readonly mesmo atribuindo o valor, ele pode ser modiicado no construtor, achei
uma vantangem em c# ter o construtor static fica mais claro a visualização.

velo

Puppets:
valew thingol !
A diferença desse readonly para o final do java que eu vi foi a seguinte:

quando vc atribui um valor em uma variável final em java, ela sempre fica com o valor
já em readonly mesmo atribuindo o valor, ele pode ser modiicado no construtor, achei
uma vantangem em c# ter o construtor static fica mais claro a visualização.

Mas no java vc pode setar o valor de uma variável final, não estática, no construtor (apenas uma vez claro)
Se a variável for estática pode fazer isso num bloco static{} (como jah exemplificado.)

VELO

Criado 16 de outubro de 2007
Ultima resposta 18 de out. de 2007
Respostas 4
Participantes 4