C++/CX中结构体同时使用abstract和final关键字的疑问
C++/CX中
abstract final结构体的作用解析 先看你给出的结构体定义:
#pragma once struct ColorHelper abstract final { static COLORREF Lighten(COLORREF color, int amount); static COLORREF Darken(COLORREF color, int amount); static bool IsSystemThemeDark(); };
abstract和final联用的作用
abstract的作用:直接禁止该结构体的实例化。哪怕有人尝试写ColorHelper helper;这样的代码,编译器会直接报错,因为abstract标记的类型不允许创建对象。final的作用:禁止任何类或结构体从它派生。虽然abstract已经让该类型无法实例化,但final进一步封死了继承的可能性,确保这个结构体的定义是“最终”的,不会被扩展。
两者结合起来,就是为了把这个结构体塑造成一个纯静态工具容器——只能通过类名调用静态方法,既不能创建对象,也不能被继承修改。
和命名空间、C#静态类的对比
- 和命名空间的区别:命名空间只是单纯的代码逻辑分组,不属于类型系统;而这个结构体是一个合法的类型,可以拥有私有静态成员(如果需要的话),还能作为模板参数使用,这些都是命名空间做不到的。
- 和C#静态类的相似性:完全等价于C#里的静态类。C#的静态类默认就是不能实例化、不能被继承的,只能包含静态成员,这个
abstract final的结构体在功能上和它完全一致,都是用来封装一组相关的工具方法,避免全局函数污染命名空间,同时明确这是一个工具类,不应该被实例化或继承。
内容的提问来源于stack exchange,提问作者IRP_HANDLER
相关产品推荐
相关产品推荐

