Tag: inheritance

为什么我的公共类不能扩展一个内部类?

我真的不明白。 如果基类是抽象的,只是用来为程序集中定义的公共子类提供通用的function,为什么不应该把它声明为内部的呢? 我不希望抽象类在程序集外部可见。 我不希望外部代码知道它。

是否有任何理由让类中的每个方法都有一个抽象类?

看来抽象类意味着类的定义不完整,因此不能被实例化。 我看到一些简单的Java代码,它具有抽象类,并定义了所有的方法。 那么我想知道,为什么他们把它当成抽象类而不是真正的类呢? 他们是否这样做,所以我们不能从这个抽象类实例化? 或者他们从定义一切的抽象类中获得其他好处?

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 […]

Python的dynamicinheritance:如何在创build实例时select基类?

介绍 我在编程工作中遇到了一个有趣的例子,需要我在python中实现dynamic类inheritance机制。 当我使用“dynamicinheritance”这个术语时,我的意思是不能从任何基类inheritance的类,而是在实例化时select从几个基类之一inheritance,这取决于某些参数。 因此,我的问题是:在我将要介绍的情况下,通过dynamicinheritance实现所需的额外function的最佳,最标准和“pythonic”方式是什么? 以简单的方式总结这个例子,我将举一个例子,用两个代表两种不同图像格式的类: 'jpg'和'png'图像。 然后我会尝试添加支持第三种格式的能力: 'gz'图像。 我意识到我的问题并不那么简单,但是我希望你已经准备好和我一起做更多的事情了。 这两个图像的例子 该脚本包含两个类: ImageJPG和ImagePNG ,都从Image基类inheritance。 为了创build一个图像对象的实例,用户被要求用文件path作为唯一的参数调用image_factory函数。 这个函数然后猜测path中的文件格式( jpg或者png )并且返回相应类的一个实例。 这两个具体的图像类( ImageJPG和ImagePNG )都能够通过其data属性解码文件。 两者都以不同的方式做到这一点。 但是,都要求Image基类为一个文件对象才能做到这一点。 import os #——————————————————————————# def image_factory(path): '''Guesses the file format from the file extension and returns a corresponding image instance.''' format = os.path.splitext(path)[1][1:] if format == 'jpg': return ImageJPG(path) if format == 'png': return […]

如何使用Cbuild立inheritance?

有可能使用Cbuild模inheritance吗? 怎么样? 示例代码将有所帮助。 编辑:我正在寻找inheritance数据和方法。 集装箱船只是无济于事。 可替代性 – 使用基类对象工作的任何派生类对象 – 是我所需要的。

生成器模式与inheritance

我有一个随着inheritance树深化而增加复杂性的对象层次结构。 这些都不是抽象的,因此,它们的所有情况都或多或less地具有复杂性。 由于参数数量非常高,我想使用Builder模式来设置属性,而不是编写几个构造函数。 因为我需要迎合所有的排列,我的inheritance树中的叶子类将具有伸缩式构造函数。 当我在devise中遇到一些问题时,我在这里浏览了一个答案。 首先,让我给你一个简单,浅的例子来说明问题。 public class Rabbit { public String sex; public String name; public Rabbit(Builder builder) { sex = builder.sex; name = builder.name; } public static class Builder { protected String sex; protected String name; public Builder() { } public Builder sex(String sex) { this.sex = sex; return this; } public Builder […]

用C ++ 17可以检测一个结构体/类是否有任何基数?

我需要一个types特征,如果给定的types是从任何东西派生的,那么这个特征将是真的,否则就是假的。 例如: template<class T> struct is_inherit //… logic of inheritance detection ; template<class T> void AppLogic(){ if constexpr(is_inherit<T>::value) { puts("T has base"); //… } else { puts("T doesn't have base"); //… } } struct A {}; struct C {}; struct B: C {}; int main() { AppLogic<A>(); // print: T doesn't have base AppLogic<B>(); // […]

在子类中覆盖init

在Objective-C中,是否有必要重写一个子类的所有inheritance构造函数来添加自定义的初始化逻辑? 例如,对于具有自定义初始化逻辑的UIView子类,以下是否正确? @implementation CustomUIView – (id)init { self = [super init]; if (self) { [self initHelper]; } return self; } – (id)initWithFrame:(CGRect)theFrame { self = [super initWithFrame:theFrame]; if (self) { [self initHelper]; } return self; } – (id)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; if (self) { [self initHelper]; } return self; } – (void) […]

在.NET中多重inheritance有什么好的select?

我在WPF应用程序中遇到了一些与我的类层次结构有关的问题。 这是两个inheritance树合并在一起的问题之一,并且没有任何合理的方法来使inheritance在没有多重inheritance的情况下顺利进行 。 我想知道是否有人有任何明智的想法,让这种系统工作,没有使其无法遵循或debugging。 我是一个低级别的工程师,所以我的第一个想法总是这样:“哦,我会用C ++编写一些这样的类,然后在外部引用它们,然后我可以让所有的老派OO都变得有趣! 唉,当你需要从托pipe控件inheritance时,这没有帮助… 让我展示一下我目前预计的类图: ____________________________________ _____________________________________ | CustomizableObject | | System.Windows.Controls.UserControl | |____________________________________| |_____________________________________| | string XAMLHeader() | ▲ | string XAMLFooter() |◄–┐ | | CustomizableObject LoadObject() | \ | | <Possible other implementations> | \ | |____________________________________| \ | ▲ ▲ \ | | | \ | | | \ […]

如何定义一个实现接口的generics类并约束types参数?

class Sample<T> : IDisposable // case A { public void Dispose() { throw new NotImplementedException(); } } class SampleB<T> where T : IDisposable // case B { } class SampleC<T> : IDisposable, T : IDisposable // case C { public void Dispose() { throw new NotImplementedException(); } } 情况C是情况A和情况B的组合。这可能吗? 如何使案例C正确?