Các "Restrict Property Values to Specific Classes" tính năng hiện đang hỗ trợ chính thức since R2016a. Nó hoạt động tương tự như cú pháp không có giấy tờ cũ, được mô tả trong Amro's answer.
classdef Packet
properties
HeaderLength uint16
PayloadLength uint16 = uint16(0);
PacketType char
end
end
Tương thích với các phiên bản trước
R2016a hỗ trợ cả hai lựa chọn cú pháp, tôi đã nhận thấy có sự khác biệt giữa chúng. Tuy nhiên, cả hai đều làm việc một chút khác biệt so với "@" - cú pháp có trụ sở tại R2015b:
Trong R2015b, một đối tượng myProp
của một lớp MyPropClass2
, thừa hưởng từ MyPropClass1
, hoàn toàn vượt qua "lớp hạn chế" kiểm tra, và sau đó được lưu trữ "nguyên trạng". Vì vậy, toàn bộ điều hoạt động giống như kiểm tra rõ ràng isa(newPropVal,MyPropClass1)
được thêm vào phương thức thuộc tính được đặt MyPropClass1
Trong trường hợp R2016a chuyển đổi đối tượng đã nói thành lớp được chỉ định. Điều này sẽ yêu cầu một hàm tạo thích hợp cho MyPropClass1
và có nghĩa là MyPropClass1
không thể là Abstract
.
Ví dụ:
classdef MyPropClass1
methods
% The following method is only used in R2016a case
function obj=MyPropClass1(val)
end
end
end
------------------------------------------------------------
classdef MyPropClass2 < MyPropClass1
end
------------------------------------------------------------
classdef MyObjClass
properties
[email protected]
end
end
------------------------------------------------------------
myObj = MyObjClass();
myObj.someprop = MyPropClass2;
% The following displays "MyPropClass1" in R2016a, and "MyPropClass2" in R2015b
disp(class(myObj.someprop));
Tương thích với phân cấp lớp
Trong cả hai R2016a và R2015b, các "Giới hạn giá trị tài sản để lớp cụ thể" vòng loại có thể không được tái định nghĩa trong lồng nhau các lớp học. Ví dụ. không thể xác định điều gì đó như:
classdef MyObjClass2 < MyObjClass
properties
[email protected]
end
end
Đó là một tìm kiếm gọn gàng! – Jonas
[Tham khảo chéo] (http://undocumentedmatlab.com/blog/setting-class-property-types) –
@YairAltman: cảm ơn một lần nữa vì đã đăng một bài viết chuyên dụng lên blog của bạn – Amro