Считайте содержание файлов RAR с помощью C#

Ключевое слово self НЕ относится только к «текущему классу», по крайней мере, не таким образом, чтобы ограничивать вас статическими членами. В контексте нестатического члена, self также предоставляет способ обхода vtable ( см. Вики на vtable ) для текущего объекта. Так же, как вы можете использовать parent::methodName() для вызова родительской версии функции, вы также можете вызвать self::methodName() для вызова текущей реализации классов метода.

class Person {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }

    public function getTitle() {
        return $this->getName()." the person";
    }

    public function sayHello() {
        echo "Hello, I'm ".$this->getTitle()."
"; } public function sayGoodbye() { echo "Goodbye from ".self::getTitle()."
"; } } class Geek extends Person { public function __construct($name) { parent::__construct($name); } public function getTitle() { return $this->getName()." the geek"; } } $geekObj = new Geek("Ludwig"); $geekObj->sayHello(); $geekObj->sayGoodbye();

Это выведет:

Привет, я Людвиг, выродок
Прощай, Людвиг, человек

sayHello() использует указатель $this, поэтому vtable вызывается для вызова Geek::getTitle(). sayGoodbye() использует self::getTitle(), поэтому vtable не используется, и вызывается Person::getTitle(). В обоих случаях мы имеем дело с методом экземпляра объекта и имеем доступ к указателю $this в вызываемых функциях.

11
задан ThinkingStiff 30 June 2012 в 04:48
поделиться

2 ответа

Низкоуровневая библиотека для работы с 7z.dll (поддерживает архивы rar, в том числе многослойные, работает с потоками .net):

Интерфейс C # (.net) для архива 7-Zip dlls

И более высокоуровневые библиотеки на основе первой:

SevenZipSharp

13
ответ дан 3 December 2019 в 07:14
поделиться
1
ответ дан 3 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: