abstract是由多种面向对象编程语言共享的关键字。可以将方法和类标记为抽象,以指示它们不包含应用程序逻辑的完整实现,并且必须进行扩展。抽象类无法实例化,其目的是为其子类提供统一的接口,以及不必为每个子类重新实现的常用方法的实现。
我正在寻找一种比反射更好的方法来调用一堆类上的静态方法。 考虑一下我有一个工厂是这样播种的: 私有静态 IReadOnlyDictionary 我正在寻找一种比反射更好的方法来调用一堆类上的静态方法。 假设我有一家工厂是这样播种的: private static IReadOnlyDictionary<string, Type> buildableTypes = typeof(IBuildable).Assembly.GetTypes() .Where(t => t.IsSubclassOf(typeof(IBuildable))) .Where(t => !t.IsAbstract) .ToDictionary(t => t.Name, t => t); 并考虑 IBuildable 是这样的: public interfact IBuildable { static abstract bool IsBuildable(string params); } 我想获取给定当前参数的所有可构建类型。 var currentlyBuildableTypes = buildableTypes.Values .Where(t => /* t.IsBuildable(params) */); // not sure what goes here 我想避免实例化每个类,因为可能会有相当多的数量。我可以很容易地通过反射来做到这一点,但考虑到 C# 11 中新的静态抽象接口,我希望有一种更优雅的方式来实现这一点。请注意,在这种情况下,使用泛型似乎也不是一种选择,因为直到运行时我才知道类型。 有时你只需要多介绍几种类型即可。 public interface IBuildable { static abstract bool IsBuildable(string parms); } public abstract class BuildHelper { public abstract Type Type { get; } public abstract bool IsBuildable(string parms); } public class BuildHelper<T> : BuildHelper where T : IBuildable { public override Type Type => typeof(T); public override bool IsBuildable(string parms) => T.IsBuildable(parms); } private static IReadOnlyDictionary<string, BuildHelper> buildableTypes = // TODO, left as an exercise for the reader
导入java.io.*; 导入 java.util.*; 公共类 Locations 实现 Map { 私有静态Map位置=新的LinkedHashMap import java.io.*; import java.util.*; public class Locations implements Map<Integer, Location> { private static Map<Integer, Location> locations = new LinkedHashMap<Integer, Location>(); private static Map<Integer, IndexRecord> index = new LinkedHashMap<>(); private static RandomAccessFile ra; static { try { ra = new RandomAccessFile("locations_rand.dat", "rwd"); int numLocations = ra.readInt(); long locationStartPoint = ra.readInt(); int i=0; while(ra.getFilePointer() < locationStartPoint) { int locationId = ra.readInt(); int locationStart = ra.readInt(); int locationLength = ra.readInt(); IndexRecord record = new IndexRecord(locationStart, locationLength); index.put(locationId, record); System.out.println(i++); } } catch(IOException e) { System.out.println("IOException in static initializer: " + e.getMessage()); } } public static void main(String[] args) throws IOException {} 静态块的执行 我稍微修改了你的代码,但看不到任何缺陷。有了这个代码 public class Main { static { System.out.println("Static initializer"); } public static void main(String[] args) { System.out.println("Main method"); } } 我得到了预期的输出: Static initializer Main method 您可能没有注意到,因为没有抛出异常,但没有数据可供读取。
为了保持.NET 中的二进制向后兼容性,通常不能向公共类和接口添加新的抽象方法。如果这样做,则针对旧版本的
我得到了这个: 核心类 { 受保护: 静态无符号 int id_seed; 无符号整型 ID; std::字符串状态; 民众: 朋友级CPU; 核(); 〜核心(); 虚拟虚空处理器...
使用 BioPython 从 PubMed 中提取摘要并写入 CSV
我对Python很陌生,想使用bio entrez包从pubmed中提取摘要。我可以根据给定的 ID 列表获取摘要并写入 csv。 我的代码是: 论文 = fetch_det...
当字段是抽象类型时,MapStruct 将模型的字段映射为空
我有一个类,它有一个字段,而该字段又是一个抽象类。我希望 MapStruct 能够从传入的 DTO 映射到内部模型,包括抽象的所有子字段......
我试图解决在 Haskell 中指定不同语言结构的抽象语法的问题,例如变量声明、数组声明、if-else 语句等,但我同意...
可以肯定的是,Dart 现在是否删除了显式定义接口,转而通过抽象隐式定义它? 我在 Dart 和接口隔离原则中看到了它,但是我...
在C#中,如果默认所有接口成员都是public和abstract的,为什么我们不能在实现类时使用override呢?
在C#中,如果默认所有接口成员都是public和abstract的,为什么我们不能在实现类时使用override呢?虽然我们可以在抽象类中使用重写。 接口IE示例 { int Ara(...
使用系统; 使用 System.Collections.Generic; 使用 System.Linq; 使用系统文本; 使用 System.Threading.Tasks; 命名空间圆区域 { 内部课程计划 { //创建一个基础...
我一直在寻找这个问题的答案,但似乎找不到,所以我希望这里有人可以帮助我。 我正在用 Latex 写一篇论文,并且非常喜欢 \
我正在尝试做类似以下的事情 - 公共抽象类Utility { // 返回值不能缓存在类范围的字段中,因为它们需要由线程调用
TypeScript 编译器提供 noImplicitOverride 设置,如果设置为 true,则在覆盖非抽象成员时将强制使用 override 关键字。例如: 抽象类A { 公开
从子类集合中实例化类,同时保持对 Typescript 中静态成员的访问
假设你有 抽象类 A { ... } B 类扩展 A { ... } C 类扩展 A { ... } 等等等等 并且您希望在使用时拥有一种属性来区分这些类......
我有一个抽象类,我想生成一个与该类型的任何非抽象子类匹配的类型,而不是其实例。这可能吗? 抽象类A { } 函数 b(类型:
我的用例是我有2个抽象类(subClassA和subClassB),我想限制如果A类有某种方法(funcA),那么B类也必须有(funcA),反之亦然。 接口 A() { 酒吧...
我来自 PHP 世界,目前正在实现我的第一个 TypeScript 项目。不幸的是,很多我在 PHP 中已经习惯了很长时间的东西在这里不起作用。其中之一是
我有一个名为 Hospital.java 的接口 公共接口医院{ 公共无效操作(); 公共无效doScan(); 公共无效 doVaccination(); } 我有一个名为
Solidity 中的抽象合约类型错误:没有参数传递给基本构造函数。指定参数或将“AssetAcquisition”标记为抽象
我遇到了一个 Solidity 合约的问题,其中的错误要求我将代码编写为摘要。摘要意味着我的代码将不可部署。 这是一份旨在转移资产的合约,并且
接口中的数据成员是final、static和final,final方法不能被重写,那么我们如何在实现接口的类中实现抽象方法呢? 这怎么...