【问题标题】:Can you extend a non partial method in a partial class?您可以在部分类中扩展非部分方法吗?
【发布时间】:2021-12-24 19:52:14
【问题描述】:

我有一个生成的部分类

public partial interface IPartialInterface
{
   Task<object> Method(string param)
}
public partial class PartialClass : IPartialInterface
{
    public Task<object> Method(string param)
    {
        // does stuff
    }
}

我想扩展 Method 以便我可以插入一些逻辑,然后根据我的逻辑让 PartialClass.Method 逻辑接管或停止它。

【问题讨论】:

  • 你听说过partial methods吗?这是你能得到的最好的。
  • 简短回答。你不能。你甚至不能“扩展”一个部分方法;这只是一个声明,意思是“在其他地方实施”。想一想:这两部分会以什么顺序执行?变量作用域是什么样的?
  • 谢谢,@FranzGleichmann。我搜索了一下,找不到任何东西。以为只有我,但猜不是;(
  • The Manual 非常详细地说明了部分方法可以做什么和不能做什么。但简而言之,它仅限于:类的一部分(生成的)定义方法签名的样子,一部分(用户编写的)可选地定义它的作用。最后,您只限于生成器生成的内容。
  • 对我来说,这听起来像继承是要走的路。

标签: c# .net-core partial-classes


【解决方案1】:

对于有同样问题的人,这对我有用:

    public partial interface IGeneratedPartialInterface
    {
        Task<object> Method(string param)
    }
    public partial class GeneratedPartialClass : IGeneratedPartialInterface
    {
        public Task<object> Method(string param)
        {
             // does stuff
        }
    }
        
    public interface MyInterface
    {
        Task<object> MethodExtended(string param)
    }
        
    // added by me, but must be named as the generated partial class
    public partial class GeneratedPartialClass : MyInterface
    {        
        public Task<object> MethodExtended(string param)
        {
            // my logic here example
            if (isInCache(param))
            {
                // do stuff
            }
            else 
            {
                return this.Method(param)
            }
        }
    }

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2019-02-10
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 2011-08-22
  • 2023-03-23
相关资源
最近更新 更多