using System.Diagnostics.CodeAnalysis; namespace System.Application.Services { /// /// 操作结果信息类,对操作结果进行封装 /// /// public abstract class OperationResultBase { #region 构造函数 public OperationResultBase() { ResultType = OperationResultType.Error; } /// /// 初始化一个 操作结果信息类 的新实例 /// /// 操作结果类型 public OperationResultBase(OperationResultType resultType) { ResultType = resultType; } /// /// 初始化一个 定义返回消息的操作结果信息类 的新实例 /// /// 操作结果类型 /// 返回消息 public OperationResultBase(OperationResultType resultType, string message) : this(resultType) { Message = message; } /// /// 初始化一个 定义返回消息与附加数据的操作结果信息类 的新实例 /// /// 操作结果类型 /// 返回消息 /// 返回数据 public OperationResultBase(OperationResultType resultType, string message, T appendData) : this(resultType, message) { AppendData = appendData; } /// /// 初始化一个 定义返回消息与日志消息的操作结果信息类 的新实例 /// /// 操作结果类型 /// 返回消息 /// 日志记录消息 public OperationResultBase(OperationResultType resultType, string message, string logMessage) : this(resultType, message) { LogMessage = logMessage; } /// /// 初始化一个 定义返回消息、日志消息与附加数据的操作结果信息类 的新实例 /// /// 操作结果类型 /// 返回消息 /// 日志记录消息 /// 返回数据 public OperationResultBase(OperationResultType resultType, string message, string logMessage, T appendData) : this(resultType, message, logMessage) { AppendData = appendData; } #endregion #region 属性 /// /// 获取或设置 操作结果类型 /// public OperationResultType ResultType { get; set; } /// /// 获取或设置 操作返回信息 /// public string? Message { get; set; } /// /// 获取或设置 操作返回的日志消息,用于记录日志 /// public string? LogMessage { get; set; } /// /// 获取或设置 操作结果附加信息 /// public abstract T? AppendData { get; set; } #endregion } /// public class OperationResult : OperationResultBase { /// public OperationResult() { } /// public OperationResult(OperationResultType resultType) : base(resultType) { } /// public OperationResult(OperationResultType resultType, string message) : base(resultType, message) { } /// public OperationResult(OperationResultType resultType, string message, object? appendData) : base(resultType, message, appendData) { } /// public OperationResult(OperationResultType resultType, string message, string logMessage) : base(resultType, message, logMessage) { } /// public OperationResult(OperationResultType resultType, string message, string logMessage, object? appendData) : base(resultType, message, logMessage, appendData) { } public sealed override object? AppendData { get; set; } } public class OperationResult : OperationResultBase where T : new() { /// public OperationResult() { } /// public OperationResult(OperationResultType resultType) : base(resultType) { } /// public OperationResult(OperationResultType resultType, string message) : base(resultType, message) { } /// public OperationResult(OperationResultType resultType, string message, T appendData) : base(resultType, message, appendData) { } /// public OperationResult(OperationResultType resultType, string message, string logMessage) : base(resultType, message, logMessage) { } /// public OperationResult(OperationResultType resultType, string message, string logMessage, T appendData) : base(resultType, message, logMessage, appendData) { } [NotNull, DisallowNull] // C# 8 not null public sealed override T? AppendData { get; set; } = new T(); } }