Tag: oop

什么是子类

什么是在Java中的“子类”? 我知道类和方法,但我不知道子类。

有一个更现代的OO版本的“让我们build立一个编译器”?

有没有更现代的,也许是面向对象的,相当于Jack Crenshaw的“ Let's Build a Compiler ”系列? 前段时间,我偶然发现了“ 让我们编译一个编译器 ”,并不能拒绝写一些代码。 我在C#中编写了一个输出.NET CIL的recursion下降C编译器。 “写一次,到处漏”是我的口号。 太糟糕了,我一直没有意识到parsingC是一个噩梦。 我现在感兴趣的是用Java编写Java编译器,输出.NET CIL或程序集,目标是自引导。 我希望有一些更新的教程可以踢。 顺便说一句,你会花更多的时间进行前期devise,还是只是写一大堆testing来支持无情重构的能力。 回想起来,我倾向于后者。 编译器工作,但代码真的很糟糕。

PHP:在类定义中使用'use'

最近我遇到了一个在类定义里面使用use语句的类。 有人可以解释它到底做了什么 – 因为我找不到任何有关它的信息。 我知道这可能是一种将其从给定文件的全局范围移开的方式,但它是否允许给定类inheritance多个父类 – 因为extends只允许一个父类引用? 我看到的例子是在Laravel的原始安装的用户模型中: <?php use Illuminate\Auth\UserTrait; use Illuminate\Auth\UserInterface; use Illuminate\Auth\Reminders\RemindableTrait; use Illuminate\Auth\Reminders\RemindableInterface; class User extends Eloquent implements UserInterface, RemindableInterface { use UserTrait, RemindableTrait; /** * The database table used by the model. * * @var string */ protected $table = 'users'; /** * The attributes excluded from the model's JSON […]

为什么我们不能在C#中重写方法时更改访问修饰符?

在C#中,我们不能改变访问修饰符,而从基类重写一个方法。 例如 Class Base { **protected** string foo() { return "Base"; } } Class Derived : Base { **public** override string foo() { return "Derived"; } } 这在C#中是无效的,它会给编译时间带来错误。 我想知道原因,为什么不允许。 有没有技术上的问题,或者是否会导致在访问限制方面不一致?

为什么要避免子types?

我看到很多Scala社区的人build议避免“瘟疫”这样的分类。 什么是反对使用子types的各种原因? 有什么select?

什么时候在PHP中使用静态修饰符

最近做了一些代码评论,我遇到了一些有很多静态方法的类,我似乎无法理解为什么? 因此我的问题是: 有什么关于在PHP中使用静态方法的最佳实践? 什么时候想要使用它们,什么时候不应该使用它们? 运行时如何处理静态方法有什么特别的区别? 它们是否影响性能或内存占用?

将其他parameter passing给jQuery each()callback函数

我正在开发一个将向用户展示调查的应用程序。 标记看起来像这样: <body> <div class="question" id="q1"> Question 1 </div> <div class="question" id="q2"> Question 2 </div> <!– etc –> </body> 我想使用jQuery从DOM构buildJavaScript对象,所以在Survey构造函数中,我使用each()方法遍历jQuery集合。 问题是,在callback函数中,我无法获得对Survey对象的引用,以便将每个Question对象附加到Survey.questions数组。 如何获得对Survey对象的引用? 有没有办法将一个额外的参数(例如对Survey对象的引用)传递给callback函数? function Survey() { this.questions = new Array; $('.question').each(function(i) { (/* Survey object */).questions.push(new Question(this)); }); } function Question(element) { this.element = $(element); }

我怎样才能通过__dict__在Python中分配一个新的类属性?

我想通过一个string对象分配一个类属性 – 但是怎么样? 例: class test(object): pass a = test() test.value = 5 a.value # -> 5 test.__dict__['value'] # -> 5 # BUT: attr_name = 'next_value' test.__dict__[attr_name] = 10 # -> 'dictproxy' object does not support item assignment

PHP:如何使用类函数作为callback

我有一个类,我想用作callback方法。 如何将它们作为parameter passing? Class MyClass { public function myMethod() { $this->processSomething(this->myCallback); // How it must be called ? $this->processSomething(self::myStaticCallback); // How it must be called ? } private function processSomething(callable $callback) { // process something… $callback(); } private function myCallback() { // do something… } private static function myStaticCallback() { // do something… } } […]

为什么C#编译器使用无效方法的重载?

我被下面的代码弄糊涂了 class A { public void Abc(int q) { Console.Write("A"); } } class B : A { public void Abc(double p) { Console.Write("B"); } } … var b = new B(); b.Abc((int)1); 代码执行的结果是写入控制台的“B”。 实际上B类包含两个重载的Abc方法,第一个是int参数,第二个是double。 为什么编译器使用整数参数的双重版本? 注意方法abc(double)不会影响或覆盖方法abc(int)