【问题标题】:Why can't I access a private static method in one half of a partial class from the other half?为什么我不能从另一半访问部分类的另一半中的私有静态方法?
【发布时间】:2014-12-10 00:06:41
【问题描述】:

一定有一些我想念的简单的东西。我有两个分部类,在两个不同的程序集中,我无法从另一个分部类引用一个分部类中的私有静态方法。

例如,在 FirstHalf 程序集中,我有以下类:

namespace FirstHalf 
{
    public partial class TestPartialClass
    {
        private static void PrintFoo()
        {
            Console.WriteLine("Foo");
        }
    }
}

然后,在 SecondHalf 程序集中,我有以下类:

namespace FirstHalf 
{
    public partial class TestPartialClass 
    {
        public static void Main(string[] args)
        {
            Console.WriteLine(PrintFoo());
        }
    }
}

但是,当我尝试从 SecondHalf 程序集调用 PrintFoo() 时,出现以下错误:

CS0103: The name 'PrintFoo' does not exist in the current context.

这是怎么回事?我有从 SecondHalf 到 FirstHalf 的引用,所以 Visual Studio 确实知道两者之间存在依赖关系。

【问题讨论】:

  • 您不能在两个程序集之间拆分部分类;它们实际上被编译为两个不同的类。
  • @DanBryant 哦,好的。您应该将其作为答案,以便我将其标记为正确。
  • 与您的要求无关,但您不能将void 类型的表达式作为参数传递给WriteLine

标签: c# partial-classes


【解决方案1】:

您不能在两个程序集之间拆分部分类;它们实际上被编译为两个不同的类。

如果你真的想跨程序集完成类似的事情,通过共享“私有”成员,你可以通过创建一个基类并继承它来获得类似的东西:

namespace FirstHalf
{
    public class Base
    {
        protected static void PrintFoo()
        {
            Console.WriteLine("Foo");
        }
    }
}

namespace SecondHalf
{
    public class Derived : FirstHalf.Base
    {
        public static void Main(string[] args)
        {
            PrintFoo();
        }
    }
}

也就是说,可能有一种更简洁的方法可以使用某种形式的组合来完成您尝试做的事情;详细信息取决于您的特定应用程序。

【讨论】:

  • 不幸的是,我的实际用例是试图解决一些库限制。我会想出另一种方法来做我想做的事情。
  • 反射可用于破解“私人”墙壁
  • @quanticle 听起来这个问题是XY Problem,你应该问一个问题来解释你正在使用什么库以及你遇到了什么限制并询问那个问题 而不是像这里那样询问你对该问题的解决方案
  • @ScottChamberlain 我同意,但不幸的是,我不确定在不提交专有代码的情况下我还能分享多少我正在尝试做的事情。在任何情况下,我都能够重构代码,这样我就可以将所有内容整合到一个程序集中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多