C# 重写c中对象的默认返回#

C# 重写c中对象的默认返回#,c#,.net,asp.net-core,.net-core,C#,.net,Asp.net Core,.net Core,在返回对象时,我希望确保在返回if之前执行操作。是否有方法覆盖对象的默认返回以执行该操作 比如说 //In the constructor I set a query start time var items = new ListReturnDTO<Product>(); .... //I want to set a query end time, but without the need to set the variable in code as it could b

在返回对象时,我希望确保在返回if之前执行操作。是否有方法覆盖对象的默认返回以执行该操作

比如说

//In the constructor I set a query start time
var items = new ListReturnDTO<Product>();

    ....

//I want to set a query end time, but without the need to set the variable in code as it could be forgotten. 
return items;
//我在构造函数中设置了一个查询开始时间
var items=new listreurndto();
....
//我想设置查询结束时间,但不需要在代码中设置变量,因为它可能会被遗忘。
退货项目;
编辑:

//我在构造函数中设置了QueryStartTime
var items=new listreurndto();
items.TotalItem=11;
........
items.data.Add(新产品{SKU=“000006”,Description=“这是测试产品7,一种罕见的产品”,价格=65.00,数量=3,Title=“测试产品7”,IsPreview=false});
items.data.Add(新产品{SKU=“000007”,Description=“这是测试产品8,一种罕见的产品”,价格=7.00,数量=30,Title=“测试产品8”,IsPreview=false});
//强制延迟复制与外部源的对话
《睡眠》(2000年);
//目前我在这里设置了QueryEndTime
items.QueryEndTime=DateTime.UtcNow.TimeOfDay;
//但是我希望它在返回时自动完成(比如我如何在构造函数中设置QueryStartTime,是否有一个等价的/用于返回的重写)
返回Task.FromResult(项目);

根据我对问题的理解

在方法末尾,自动调用一些代码。或更多 特别是,若方法的返回类型不是void,则执行一些 行动。所以在给定的示例中,它应该更新QueryEndTime

这个概念看起来很简单。其中一个库,你可能想试试,可能是。其他的也很少

Postsharp具有,它可以在方法执行之前和之后注入行为。上一个链接中的示例代码

[PSerializable]
public class LoggingAspect : OnMethodBoundaryAspect
{

  public override void OnEntry(MethodExecutionArgs args)
  {
     Console.WriteLine("The {0} method has been entered.", args.Method.Name);
  }

  public override void OnSuccess(MethodExecutionArgs args)
  {
      Console.WriteLine("The {0} method executed successfully.", args.Method.Name);
  }

  public override void OnExit(MethodExecutionArgs args)
  {
     Console.WriteLine("The {0} method has exited.", args.Method.Name);
  }     

  public override void OnException(MethodExecutionArgs args)
  {
      Console.WriteLine("An exception was thrown in {0}.", args.Method.Name);
  }

}

static class Program
{
   [LoggingAspect]
   static void Main()
   {
     Console.WriteLine("Hello, world.");
   }
}

现在来看您的示例代码,如果是一次性的,请查看此代码。

根据我对问题的理解

在方法末尾,自动调用一些代码。或更多 特别是,若方法的返回类型不是void,则执行一些 行动。所以在给定的示例中,它应该更新QueryEndTime

这个概念看起来很简单。其中一个库,你可能想试试,可能是。其他的也很少

Postsharp具有,它可以在方法执行之前和之后注入行为。上一个链接中的示例代码

[PSerializable]
public class LoggingAspect : OnMethodBoundaryAspect
{

  public override void OnEntry(MethodExecutionArgs args)
  {
     Console.WriteLine("The {0} method has been entered.", args.Method.Name);
  }

  public override void OnSuccess(MethodExecutionArgs args)
  {
      Console.WriteLine("The {0} method executed successfully.", args.Method.Name);
  }

  public override void OnExit(MethodExecutionArgs args)
  {
     Console.WriteLine("The {0} method has exited.", args.Method.Name);
  }     

  public override void OnException(MethodExecutionArgs args)
  {
      Console.WriteLine("An exception was thrown in {0}.", args.Method.Name);
  }

}

static class Program
{
   [LoggingAspect]
   static void Main()
   {
     Console.WriteLine("Hello, world.");
   }
}

现在来看您的示例代码,如果是一次性的,请查看此代码。

因此您有多个方法或类来执行一些查询并填充数据。您希望在返回对象中记录查询开始和结束时间,返回对象的类型始终为
listreurndto
,其中
T
是被查询的实体类型

您的问题缺少一点上下文,但假设您使用类似于存储库模式的东西,您可以使用一个可公开调用的方法使您的基本存储库看起来像这样,该方法反过来调用一个必须由派生类实现的抽象方法,从而将实际工作转移到一个更专门的类型:

public abstract class BaseRepository<TEntity>
{
    public async Task<ListReturnDTO<TEntity>> QueryDataAsync()
    {
        var items = new ListReturnDTO<TEntity>();

        items.QueryStartTime = DateTime.UtcNow;

        await QueryAndPopulateDataAsync(items);

        items.QueryEndTime = DateTime.UtcNow;

        return items;
    }

    protected abstract Task QueryAndPopulateDataAsync(ListReturnDTO<TEntity> container);
}
这样称呼它:

var repo = new ProductRepository();
var data = await repo.QueryDataAsync();

数据
将分配其
查询开始时间
查询结束时间
数据
属性。

因此您有多个方法或类来执行一些查询并填充数据。您希望在返回对象中记录查询开始和结束时间,返回对象的类型始终为
listreurndto
,其中
T
是被查询的实体类型

您的问题缺少一点上下文,但假设您使用类似于存储库模式的东西,您可以使用一个可公开调用的方法使您的基本存储库看起来像这样,该方法反过来调用一个必须由派生类实现的抽象方法,从而将实际工作转移到一个更专门的类型:

public abstract class BaseRepository<TEntity>
{
    public async Task<ListReturnDTO<TEntity>> QueryDataAsync()
    {
        var items = new ListReturnDTO<TEntity>();

        items.QueryStartTime = DateTime.UtcNow;

        await QueryAndPopulateDataAsync(items);

        items.QueryEndTime = DateTime.UtcNow;

        return items;
    }

    protected abstract Task QueryAndPopulateDataAsync(ListReturnDTO<TEntity> container);
}
这样称呼它:

var repo = new ProductRepository();
var data = await repo.QueryDataAsync();

数据
将分配其
查询开始时间
查询结束时间
数据
属性。

您能否详细说明“覆盖对象的默认返回”的确切含义?“查询开始时间”和“查询结束时间”的确切含义是什么?您能否详细说明“覆盖对象的默认返回”的确切含义?“查询开始时间”和“查询结束时间”到底是什么?啊,非常感谢,我想如果没有本地的能力,会有类似的事情发生。我会看一看,看看是什么。谢谢你。唯一的问题是Postsharp。免费版是非常有限的。啊,非常感谢,我想如果没有本地人的能力,会有类似的事情发生。我会看一看,看看是什么。谢谢你。唯一的问题是Postsharp。免费版是非常有限的。好吧,我可以看到这一点,并想到了类似的东西,但我追求的是一些不需要特定调用方法来运行功能的东西。我只是希望这个过程尽可能自动化。我将查看上面提到的库,但如果它不合适,我将返回到上面。Cheesok我看到了这一点,并想到了类似的东西,但我所追求的东西不需要特定的方法调用来运行功能。我只是希望这个过程尽可能自动化。我将查看上面提到的库,但如果它不合适,我将返回到上面。干杯