【问题标题】:Is there a way to encapsulate a 2nd class into primary class?有没有办法将第二类封装到初级类中?
【发布时间】:2013-04-25 14:15:55
【问题描述】:

我想知道如何让初级类显示第二类的对象(保持第二类内部)?我正在使用 c#。

有点像一个包装器。那是一件坏事?有人可以提供示例或链接吗?

谢谢...

【问题讨论】:

  • “显示第二类对象”是什么意思?
  • 你可以使用内部类。
  • 内部类/装饰器模式/继承....我认为您需要更具体地解决您的问题...
  • 1) “显示第二类对象” - 将其视为抽象、接口等。 2) “内部类” - 嗯.. 这可以工作,但我不确定它会有所帮助例如,如果我有 100 节课。 3)“内部类/装饰器模式/继承” - 我正在寻找一些我不必为每个类的主类添加“:”的东西
  • 这并不能解释什么。请详细一点。 知道你的意思,但我们不知道。

标签: c# encapsulation inner-classes


【解决方案1】:

对此的简单模式是使用嵌套类,其属性可以公开您想要公开的内容。

public class MyClass
{
   private class SubClass
   {
      int someValue;
   }

   private SubClass innerClass = new SubClass();

   public int SubValue
   {
      get { return innerClass.someValue; }
      set { innerClass.someValue = value; }
   }
}

您可以使用internal modifier 扩展此模式以有效地拥有许多私有子类。内部对象本质上对同一程序集中的代码是公共的,而在其他任何地方都是私有的。将包装器标记为公开,每个子标记为内部。请注意,这需要将包装类和所有子类放在它们自己的单独项目(即程序集)中。您可以(并且应该)在新项目的自己的文件中定义每个类。

public class WrapperClass
{
   private SubClass1 internalClass1 = new internalClass1();
   private SubClass2 internalClass2 = new internalClass2();

   public int SubValue1
   {
      get { return internalClass1.someValue; }
      set { internalClass1.someValue = value; }
   }

   public int SubValue2
   {
      get { return internalClass2.someValue; }
      set { internalClass2.someValue = value; }
   }
}

internal class SubClass1
{
   int someValue;
}

internal class SubClass2
{
   int someValue;
}

【讨论】:

  • 这可以工作,但如果我有 100 个课程,我担心它会导致性能或开销。所以建议??
  • @fletchsod 我不太明白。你的意思是你有 100 个内部类,你想在一个大的公共包装类中托管?或者您有 100 对包装器/子类,只是不想花时间编写嵌套模式?
  • 是的,100 个单独的类(单独的 files0 被 1 个公共包装类包裹。
  • @fletchsod - 将所有这些类移动到他们自己的项目中并将它们标记为内部,然后创建您的单个公共包装类。请参阅我的更新答案。
猜你喜欢
  • 1970-01-01
  • 2011-10-23
  • 2020-03-26
  • 2012-11-14
  • 1970-01-01
  • 2023-02-03
  • 2019-08-11
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多