【发布时间】:2016-12-15 13:30:12
【问题描述】:
在许多编程语言中,例如C# 你可以为类构造函数提供参数的类型。
类似:
MyConstructor(IDependencyClass)
这里,'IDependencyClass' 是一个接口。这允许您使用依赖注入和组件的松散耦合。
Matlab 也支持 OOP,尽管它不是强类型的,也没有提供类接口 (AFAIK) 之类的概念,但我天真地认为我可以使用以下任何一种变体:
classdef (Abstract) AbsClass
...
end
接下来,在任何依赖 AbClass 的类中,我都会像这样创建一个私有属性:
properties (Access = private)
% The DataModule type is restricted AbsClass.
DataModule Core.Modularity.AbsBase
end
然后可以在构造时设置此属性。
或者,我可以使用以下方法检查构造函数:
isa(input argument, 'Core.Modularity.AbsBase')
奇怪的是,Matlab 不想打球,抛出一个错误:
Abstract classes cannot be instantiated.
Class 'Core.Modularity.AbsClass' defines abstract methods and/or properties
对我来说,这有点奇怪......显然Matlab的类型检查机制想要创建抽象类的实例,这显然是不可能的。
但是,如果您想设计一个中高复杂度的适当应用程序,则无法做到这一点是一个巨大的缺点。
我错过了什么?
编辑
相当愚蠢,但事实证明 'isa()' 方法确实有效,但我确实省略了 '
虽然限制Properties类的方法不起作用还是有点奇怪:
https://www.mathworks.com/help/matlab/matlab_oop/restrict-class-of-properties.html
【问题讨论】: