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 接口。
解决这个问题最干净的方法是什么?
我想在调试程序时创建一个控制台窗口并在其上打印一些信息.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!
我怎样才能解决这个问题?
我有父类X和父类H.
H在其字段数据中具有对类型X的引用.H的构造函数需要类型为X的实例,然后将其存储在引用中.
然后我从X派生出一个Child类x1,从H派生出一个子类h1.
h1将在其构造函数中接受X或x1的实例.
但是,在父类X中尚未定义的x1的方法和属性将不可用于h1.
如何在类h1中永久地将x1转换为x1的类型?