抽象类是无法实例化的类。它们的存在是为了为几个具体类提供通用功能和接口规范。
有没有办法让基类要求派生类具有与派生的同一类的对象进行比较的函数?
我有一项家庭作业,该作业的一小部分要求一个抽象的父“电影”类,其中包含三个具体子类:“喜剧”、“戏剧”和“古典”。 每个子类永远不会
我试图运行这段代码,但是当我尝试检查时,存在一个问题:对象的类型与其抽象类类型不匹配 它在“if(处理程序是处理程序 我试图运行这段代码,但是当我尝试检查时,存在一个问题,即对象的类型与其抽象类类型不匹配 它位于“if (handler is Handler h)”这一行 void Main() { var requestHandler = new RequestHandler(); var result = requestHandler.Handle(new GetAge()); Console.WriteLine(result); } public interface IRequest<T> { } public class GetAge : IRequest<int> { } public interface IHandler {} public abstract class Handler<TRequest, TResponse> : IHandler where TRequest : IRequest<TResponse> { public TResponse Handle(IRequest<TResponse> request) { return Handle((TRequest)request); } protected abstract TResponse Handle(TRequest requst); } public class GetAgeHandler : Handler<GetAge, int> { protected override int Handle(GetAge request) { return 20; } } public class RequestHandler { public Dictionary<Type, IHandler> requestHandlers = new() { [typeof(GetAge)] = new GetAgeHandler() }; public T Handle<T>(IRequest<T> request) { var handler = requestHandlers[request.GetType()]; if (handler is Handler<IRequest<T>, T> h) { return h.Handle(request); } return default; } } 看起来应该可以,但似乎我做错了什么 简单来说,模式匹配失败是因为泛型类型默认是不变的。即使您有Handler<GetAge, int>,也不认为与Handler<IRequest<int>, int>兼容。如果泛型类型是协变或逆变,那么这是允许的,但在这种特定情况下,这是不可能的。 解决此问题的一种方法是定义 Handle 方法,如下所示: public TResponse Handle<TRequest, TResponse>(TRequest request) where TRequest : IRequest<TResponse> { var handler = requestHandlers[request.GetType()]; if (handler is Handler<TRequest, TResponse> h) { return h.Handle(request); } return default(TResponse); } 你会这样称呼它: var result = requestHandler.Handle<GetAge, int>(new GetAge());
我阅读了关于抽象类 abc.ABC 的非常好的文档。它有这个例子(我为了这个问题而缩短了): 导入 abc 基类(abc.ABC): @财产 @abc。
C++中有没有一种方法可以编写一个具体的类,当从它派生另一个类时,该类有一个必须重写的方法。抽象类允许强制派生类创建
我正在编写一个带有抽象方法的抽象类(因此,从它继承的所有类都必须实现该方法)。但是,我不想指定该方法必须使用的参数,...
我知道下面的代码可以用来将数据类型为double的特征矩阵的数据写入二进制文件。 模板 void WriteEigenMatrix(const Eigen::Matrix 我知道以下代码可用于将数据类型为 double 的特征矩阵的数据写入二进制文件。 template<class T> void WriteEigenMatrix(const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& m, const char* fileName) { std::ofstream outFile(fileName, std::ios_base::out | std::ios_base::binary); outFile.write(m.data(), m.rows()*m.cols()); outFile.close();` } 如何概括此函数以接受其他特征数据类型(如 Eigen::Vector 和 Eigen::Array)作为输入? 如果我使用 Eigen::EigenBase,我知道该函数将接受所有此类数据类型。然而,问题是我不能再使用m.data(),因为它没有在基类中定义。 有什么建议可以解决这个问题吗? 如果您只想允许“密集”对象,您可以按如下方式操作: template<class Derived> void WriteEigen(const Eigen::DenseBase<Derived>& dense, const char* fileName) { std::ofstream outFile(fileName, std::ios_base::out | std::ios_base::binary); outFile.write(reinterpret_cast<const char*>(dense.derived().data()), dense.rows() * dense.cols()); outFile.close(); } 所有稠密矩阵(包括向量和数组)都继承自DenseBase,在derived上调用DenseBase将返回具体的矩阵类型。 或使用您喜欢的任何底座。
Xamarin iOS 绑定 - 协议 - 无法创建抽象类的实例
我使用 Sharpie 为 Zebra 扫描仪 SDK 生成了一些绑定代码。 斑马扫描仪 SDK 一旦我处理了 [Verify] 属性,生成的代码就可以正常构建。 的起点...
我有抽象类(没有构造函数),我想向其中注入另一个类。 抽象类: 从 '../../shared/services/errorHandler.service' 导入 { ErrorHandler } ; 导入 { 注入 }...
Type.GetProperties 方法返回一个 PropertyInfo[] 但 PropertyInfo 是 Abstract
在 C# 文档中,Type 类的 GetProperties 方法返回属性信息数组:System.Reflection.PropertyInfo[]。您可以在此处的文档中看到这一点: https://学习。
我遇到了我认为可能是语法问题的问题。我有一个抽象类: 公共抽象类 MyAbstractClass : MonoBehavior { 公共抽象 GameObject ShouldBeSerialized { 获取;是...
我有以下 abc 课程: 记录器类(ABC): @抽象属性 def 文件名前缀(自身): 经过 @抽象属性 deftrace_id_length(自身): 经过 @
我不太熟悉 C# 或抽象类,所以这可能是一个简单的修复。我有一个带有可为空 Action 属性的抽象类: 公共抽象类 MyAbstractClass { 公开摘要
随着Python 3.12的发布,pathlib.Path现在可以被子类化。我想为非操作系统环境(ftp、sftp、s3 存储等)创建一个子类 CustomPath(Path),这意味着我必须重新实现...
在C#中,如果默认所有接口成员都是public和abstract的,为什么我们不能在实现类时使用override呢?
在C#中,如果默认所有接口成员都是public和abstract的,为什么我们不能在实现类时使用override呢?虽然我们可以在抽象类中使用重写。 接口IE示例 { int Ara(...
我有疑问是否可以在抽象类的另一个构造函数中调用构造函数。例如, 公共抽象类 Sth{ 受保护的 Sth(){} protected Sth(整数){} 受保护...
我有一个浅层类层次结构(底部的最小可重现代码示例),其中我使用抽象基类来保存一堆相关类之间的大部分通用逻辑,并带有一个 virt...
我有几个类,大约 40 个左右,它们实现了一个接口。我想引入一个静态变量,该变量对于该接口的每个实现类来说都是本地的。例如: 公开
C# 中有没有办法访问抽象类中定义的非静态、非常量属性的默认值? 例如,给定: 公共抽象类 SomeClass { 公共整数
我有这个抽象类,我尝试用对象初始化字典 但有人不让我 公共抽象类 ICharacterBody3DState { 公共静态词典 我有这个抽象类,我尝试用对象初始化字典 但有人不让我 public abstract class ICharacterBody3DState { public static Dictionary<StateInput, ICharacterBody3DState> State = new Dictionary<StateInput, ICharacterBody3DState>() { StateInput.sprint=new StateInput(), }; } 每个状态都继承自这个抽象类: public class WalkingState : ICharacterBody3DState { } 但它给了我: CS0747:无效的初始值设定项成员声明符。 有没有办法用对象初始化抽象类字典? public abstract class ICharacterBody3DState { public static Dictionary<StateInput, ICharacterBody3DState> State = new Dictionary<StateInput, ICharacterBody3DState>() { { StateInput.sprint, new StateInput() }, }; } 将每个键和值放在花括号{}内,并用comma分隔它们。这是向字典添加项目的正确方法。