小编Bob*_*der的帖子

装饰者模式隐藏装饰者的接口

public interface IRender
{
  void Render();
}

public interface IUpdate
{
  void Update(float deltaTime);
}
Run Code Online (Sandbox Code Playgroud)

我有实现 IRender 的类,其中一些还实现 IUpdate。通过使用装饰器模式,我可以扩展他们的 Render 方法。

public abstract class Decorator: IRender
{
  protected IRender decoratee;

  public Decorator(IRender decoratee)
  {
    this.decoratee = decoratee;
  }

  public virtual Render()
  {
    decoratee.Render();
    // add custom rendering code here.
  }
}
Run Code Online (Sandbox Code Playgroud)

这样做的美妙之处在于,我可以通过将对象包装到多个装饰器(如头巾娃娃)中来创建自定义渲染行为。

我的问题是 IUpdate 接口以及装饰者实现的任何其他接口现在将被装饰器隐藏。我有许多系统接受对象列表,并根据它们实现的接口对它们进行操作。装饰类只会公开 IRender 接口。

解决这个问题最干净的方法是什么?

c# decorator

5
推荐指数
0
解决办法
821
查看次数

AllocConsole在Visual Studio中不打印

我想在调试程序时创建一个控制台窗口并在其上打印一些信息.VS 2010没有为我提供为程序设置不同输出类型的选项,具体取决于它是处于调试模式还是发布模式,因此我采用手动创建控制台窗口,如下所示:

[DllImport("kernel32.dll")]
public static extern Int32 AllocConsole();

static void Main()
{
#if DEBUG
    AllocConsole();
#endif
....
Run Code Online (Sandbox Code Playgroud)

弹出窗口打开一个控制台窗口,但没有任何内容写入它.我尝试了一堆其他的pinvoke(AttachConsole等......)什么也没做.然后我终于尝试在Visual Studio之外运行应用程序,并且控制台窗口工作.显然Visual Studio正在吃掉我所有的Console.WriteLines!

我怎样才能解决这个问题?

c# console visual-studio-2010

2
推荐指数
1
解决办法
1912
查看次数

动态铸造C#

我有父类X和父类H.

H在其字段数据中具有对类型X的引用.H的构造函数需要类型为X的实例,然后将其存储在引用中.

然后我从X派生出一个Child类x1,从H派生出一个子类h1.

h1将在其构造函数中接受X或x1的实例.

但是,在父类X中尚未定义的x1的方法和属性将不可用于h1.

如何在类h1中永久地将x1转换为x1的类型?

c# casting dynamic

1
推荐指数
1
解决办法
622
查看次数

标签 统计

c# ×3

casting ×1

console ×1

decorator ×1

dynamic ×1

visual-studio-2010 ×1