Pergunta

Será que cada chamada estática iniciará um novo segmento?

Por exemplo:.

class A
{
    public static void displayName()
    {
        Console.WriteLine("myName");
    }

    public static void displayAge()
    {
        Console.WriteLine("myAge");
    }
}


class B
{
    public void Foo()
    {
        A.displayName();
        A.displayAge();           
    }
} 

fica as chamadas acima corre independentes um do outro? Se sim, então, é algo semelhante ao de Threading?

Foi útil?

Solução

Responder a sua dúvida quanto chamada estática:

Mas eu ouvi cada chamada estática é independentes um do outro como existe há membros de instância e só estáticos estão envolvidos. é assim? - Sri Kumar 36 mins ago

Você pode pensar que há uma instância de 'global' de sua classe, e todos os métodos estáticos são realizados por esta instância.

Como no seu exemplo, você pode criar uma instância de 'user' chamando ClassA myA = new ClassA(). Enquanto isso, haverá uma instância de 'global', que é criado pelo tempo de execução, mas invisível para você, e métodos estáticos residem neste caso. Os métodos estáticos comportamento como métodos de instância dentro dessa instância 'global'.

Por incrível que pareça, em C # existe um construtor estático, que será chamado quando a instância 'global' é inicializado pelo tempo de execução.

Você pode testar este código:

class A
{
    static A() {
       Console.WriteLine("Creating the global instance of class A....");
    }

    public static void displayName()
    {
        Console.WriteLine("myName");
    }

    public static void displayAge()
    {
        Console.WriteLine("myAge");
    }
}


class B
{
    public void Foo()
    {
        A.displayName();
        A.displayAge();           
    }
}

A saída será:

Creating the global instance of class A....
myName
myAge

Além disso, métodos estáticos têm diferença nada de métodos de instância.

As variáveis ??em cada método estático terá o seu próprio espaço, e eles são independentes de um método para outro método.

Outras dicas

Sem eles serão executados sequencialmente no mesmo segmento

No. Os métodos estáticos são como quaisquer outros métodos menos que você invocá-los em diferentes tópicos que serão executados no mesmo segmento do qual você tenha invocado.

Ela realmente depende de onde você invocar. Os métodos estáticos em si não cria threads e executado dentro.

Um método estático é um método que não tem qualquer classe associada a ele. Isto significa que chamar um método estático não tem que passar por qualquer engano, ao contrário de um método virtual que é resolvido com base no objeto que é chamado por diante.

Todos os métodos será executado no thread do método de invocação, seja virtual ou estático. Se você quer um método para executar em um segmento diferente, usar a piscina segmento ou alguma outra técnica.

Mais uma coisa:

eu ouvi cada chamada estática é independente um do outro

método estático chamadas não são realmente independentes.

Método estático ainda pode acessar outros campos estáticos e propriedades dentro da mesma classe, ou publicamente campos estáticos visíveis e propriedades de outras classes, que também são global e acumulados durante a vida do seu aplicativo.

Os métodos estáticos que estão mudando o estado de campos estáticos não são "independentes", como você sugeriu. A única coisa que posso dizer com certeza que eles estão sempre invocado em um única instância (sempre usando os mesmos dados privados).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top