C# utiliza valores de segunda classe(valores que são usados com restrições)? Se utilizar ele viola o princípio da completude de tipo que diz que [quote]Nenhuma construção de linguagem deve ser arbitrariamente restringida pelo tipo dos valores envolvidos na mesma[/quote]
E ai? oq vcs acham?
cara, aqui é um forum de Java, vai no site da msdn que talvez eles te ajudam!
boa sorte!
Já tentei la velho… não acho nada relacionado… eu sei q eh forum java… mas eu postei a duvida no fórum de outras linguagens
Ele está se referindo a isto aqui:
http://www.cs.jcu.edu.au/Subjects/cp2003/1997/foils/moreTypes/moreTypes.html
Se for isso, tanto C# quanto Java não têm valores de segunda classe, porque structs, classes e tipos primitivos podem ser passados de/para métodos, etc.
Como a tal página é velha (1997), então ela não considerou a evolução das linguagens. O exemplo dado (Pascal não poder retornar em um método um “record”) não vale mais.
hahahaha engracado que se alguem pergunta alguma coisa sobre C ia ter 20 nego respondendo.
Como eh C# sempre aparece alguem “reclamando” que aqui eh forum de Java 
[quote=mcbarsotti]cara, aqui é um forum de Java, vai no site da msdn que talvez eles te ajudam!
boa sorte![/quote]
Não senhor, esse aqui é o forum “Outras linguagens”, que fica na seção de mesmo nome que abriga também o forum de Ruby. E mesmo antes de existir essa seção específica o GUJ sempre foi aberto à praticamente qualquer assunto referente ao desenvolvimento de software.
E ai? oq vcs acham?[/quote]
Tipos escalares suportam as mesmas operações que tipos por referência. Poderia citar exemplos de quais operações são restritas? Conheço a CLR razoavelmente bem e não tenho um exemplo disso. Não é o caso dos tipos primitivos do Java, por exemplo.
Bem galera… vlw pela ajuda ai!
Pesquisando um pouquinho e lendo um livro aqui sobre Paradigmas de Linguagens de Programação cheguei a seguinte conclusao
Em C# temos valores de segunda classe como por exemplo no código abaixo, uma abstração de procedimento.
public void oiMundo() {
    Console.write("oiMundo");
}
Onde viola o princípio da completude de tipo pois uma abstração de procedimento não pode ser um argumento para um abstração de função.
Eu desconehcia esse principio:
Lendo mais cheguei nesse afirmação:
Se nenhuma operação nao deve ser restringida pelo tipo de valores envolvidos em Java a sobrecarga d  metodos não violaria esse principio?
Tipo:
System.out.println(double value) , System.out.println(boolean value) , System.out.println(int value)
Ou entendi errado?.. :roll:
Acho que falei a besteira qnto a sobrecarga.
A sobrecarga de metodos é um caracteristica da Orietancao a Objetos.
Mas mudando o tipo da pergunta linguagens orientada a objetos que suportam a sobrecarga não violaria esse principio?
Eu entendi nenhuma construção da linguagem.
Por exemplo, o switch do Java é restrito a tipos primitivos e enums. Obedecer esse princípio significaria que Strings, BigDecimals e qqr outro objeto que implemente comparações poderia ser usado no switch.
É a minha opinião.
Em C# é possível, mas com um pouco de trabalho, receber e retornar referências a métodos também.
Este código foi testado com o Visual Studio 2008.
    // Requer .NET Framework 3.5 (Visual Studio 2008) para rodar
    class Exemplo
    {
        // Teste para procedimentos
        public void oiMundo()
        {
            Console.WriteLine("Oi, mundo!");
        }
        public void adeusMundoCruel() 
        {
            Console.WriteLine("Adeus, mundo cruel!");
        }
        public Action retornaAcao(int n)
        {
            switch (n)
            {
                case 1: return oiMundo;
                case 2: return adeusMundoCruel;
                default: return null;
            }
        }
        public void executaAcao(Action act)
        {
            act();
        }
        // Teste para funções
        public int max(int x, int y)
        {
            return x > y ? x : y;
        }
        Func<int, int, int> min = (x, y) => x < y ? x : y;
        public int executaFuncao(Func<int, int, int> f, int x, int y)
        {
            return f(x, y);
        }
        public Exemplo()
        {
            retornaAcao(1)();
            executaAcao(retornaAcao(2));
            Console.WriteLine("Maximo de 10 e 20 eh " + executaFuncao(max, 10, 20));
            Console.WriteLine("Minimo de 10 e 20 eh " + executaFuncao(min, 10, 20));
        }
    }
        [quote]Em C# é possível, mas com um pouco de trabalho, receber e retornar referências a métodos também.
Este código foi testado com o Visual Studio 2008. [/quote]
Qual o problema disso? Se tem algum
Só falei “um pouco de trabalho” porque não é intuitivo.
O tipo de uma variável ou parâmetro que recebe uma referência a um método sem parâmetros e que não retorna nada é Action.
O tipo de uma variável ou parâmetro que recebe uma referência a um um método com parâmetros (int, short) e que não retorna nada é Action<int,short>
O tipo de uma variável ou parâmetro que recebe uma referência a um um método sem parâmetros e que retorna um double é Func<double>
O tipo de uma variável ou parâmetro que recebe uma referência a um um método com parâmetros (string, long, decimal) e que retorna um DateTime é Func<string,long,decimal,DateTime>
Veja o programa de exemplo que preparei acima.
A saída esperada dele, se você instanciar um elemento da classe Exemplo, é
Oi, mundo!
Adeus, mundo cruel!
Maximo de 10 e 20 eh 20
Minimo de 10 e 20 eh 10
[quote=raffccc]Bem galera… vlw pela ajuda ai!
Pesquisando um pouquinho e lendo um livro aqui sobre Paradigmas de Linguagens de Programação cheguei a seguinte conclusao
Em C# temos valores de segunda classe como por exemplo no código abaixo, uma abstração de procedimento.
public void oiMundo() {
    Console.write("oiMundo");
}
Onde viola o princípio da completude de tipo pois uma abstração de procedimento não pode ser um argumento para um abstração de função.
[/quote]
Em C# 3.0 é possível converter qualquer expressão em dados:
	static void If (Func<bool> cond, Action then, Action else_) {
		if (cond())
			then();
		else 
			else_();			
	}
	static void Main () {
		If (()=> true , ()=> Console.WriteLine ("Oi Mundo"), ()=> Console.WriteLine ("Nada no else") );
	}
C# 3.0 tem closures, ainda não existe conversão automática de código em closures, mas isso é outra história.
[quote=pcalcado][quote=mcbarsotti]cara, aqui é um forum de Java, vai no site da msdn que talvez eles te ajudam!
boa sorte![/quote]
Não senhor, esse aqui é o forum “Outras linguagens”, que fica na seção de mesmo nome que abriga também o forum de Ruby. E mesmo antes de existir essa seção específica o GUJ sempre foi aberto à praticamente qualquer assunto referente ao desenvolvimento de software.[/quote]
opaa, é a força do habito!! :lol:
mas se a idéia é abragir qualquer assunto relacionado ao desenvolvimento, não deveriam trocar o slogan do guj “e o maior forum brasileiro sobre Java” por “e o maior forum brasileiro sobre Desenvolvimento e Java” ou algo do tipo  :roll:
abraços!
Continuamos sendo o maior forum sobre Java. O slogan nao diz que o forum eh somente sobre Java 