что c# эквивалентен из статических {…} в Java?

В Windows вы можете использовать модуль 'win32console' (доступный в некоторых дистрибутивах Python) или модуль 'ctypes' (Python 2.5 и выше) для доступа к Win32 API.

Чтобы увидеть полный код, который поддерживает оба способа, см. Код сообщения о консоли цвета из Testoob .

Пример ctypes:

import ctypes

# Constants from the Windows API
STD_OUTPUT_HANDLE = -11
FOREGROUND_RED    = 0x0004 # text color contains red.

def get_csbi_attributes(handle):
    # Based on IPython's winconsole.py, written by Alexander Belchenko
    import struct
    csbi = ctypes.create_string_buffer(22)
    res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi)
    assert res

    (bufx, bufy, curx, cury, wattr,
    left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
    return wattr


handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
reset = get_csbi_attributes(handle)

ctypes.windll.kernel32.SetConsoleTextAttribute(handle, FOREGROUND_RED)
print "Cherry on top"
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, reset)

22
задан peter.murray.rust 29 July 2009 в 18:01
поделиться

2 ответа

вы используете статический конструктор, например:

public class Foo
{
  static Foo()
  {
     // inits
  }
}

Вот дополнительная информация .

Итог: это конструктор без параметров с прикрепленным к нему ключевым словом static . Работает так же, как статический блок в Java.

Edit: Еще одна вещь, о которой стоит упомянуть. Если вы просто хотите построить что-то статически, вы можете статически инициализировать переменную без использования статического конструктора. Например:

public class Foo
{
  public static Bar StaticBar = new Bar();
}

Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init () , по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)

Итог: это конструктор без параметров с привязанным к нему ключевым словом static . Работает так же, как статический блок в Java.

Edit: Еще одна вещь, о которой стоит упомянуть. Если вы просто хотите построить что-то статически, вы можете статически инициализировать переменную без использования статического конструктора. Например:

public class Foo
{
  public static Bar StaticBar = new Bar();
}

Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init () , по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)

Итог: это конструктор без параметров с прикрепленным к нему ключевым словом static . Работает так же, как статический блок в Java.

Edit: Еще одна вещь, о которой стоит упомянуть. Если вы просто хотите построить что-то статически, вы можете статически инициализировать переменную без использования статического конструктора. Например:

public class Foo
{
  public static Bar StaticBar = new Bar();
}

Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init () , по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)

Если вы просто хотите построить что-то статически, вы можете статически инициализировать переменную без использования статического конструктора. Например:

public class Foo
{
  public static Bar StaticBar = new Bar();
}

Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init () , по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)

Если вы просто хотите построить что-то статически, вы можете статически инициализировать переменную без использования статического конструктора. Например:

public class Foo
{
  public static Bar StaticBar = new Bar();
}

Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init () , по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)

39
ответ дан 29 November 2019 в 04:40
поделиться

Статический по-прежнему является ключевым словом в C #:

public class Foo {
    public static Foo DefaultFoo;

    static Foo {
        DefaultFoo = new Foo();
        // initialize 
        DefaultFoo.init();
    }

    public Foo() {
    }

    void init() {
        // initialize
    }
}
3
ответ дан 29 November 2019 в 04:40
поделиться