假设我有一个以下的C#界面:
public interface IInterface<T> where T : SomeClass
{
void InterfaceMethod();
}
Run Code Online (Sandbox Code Playgroud)
而SomeClass的定义如下:
public class SomeClass
{
public void SomeMethod();
}
Run Code Online (Sandbox Code Playgroud)
现在我想定义接口的实现,它不会编译:
public class InterfaceImpl<T> : IInterface<T>
{
public void InterfaceMethod()
{
T test = default(T);
test.SomeMethod(); //Gives Error
}
}
Run Code Online (Sandbox Code Playgroud)
在我改为之前:
public class InterfaceImpl<T> : IInterface<T> where T : SomeClass
{
public void InterfaceMethod()
{
T test = default(T);
test.SomeMethod(); //Compiles fine
}
}
Run Code Online (Sandbox Code Playgroud)
类型约束是否也从接口"继承"(不是正确的词,我知道)是否有意义?
这是我在这里的第一个问题,因为我在开发我的第一个iOS应用时遇到了问题.它是成千上万的手电筒应用程序之一,但我正在努力为它添加尽可能多的功能.其中一个是在应用程序进入后台或终止时保存应用程序的状态.转到前台(iOS 4或更高版本)或重新启动后,我正在从文件加载设置并重新应用它们.其中一个设置显然是AVCaptureDevice.torchMode
.但是,我遇到了这个问题.我正在该applicationDidBecomeActive
方法中重新应用这些设置.这一切似乎都有效,但是当我快速点击主页按钮然后重新启动应用程序时,应用程序将执行以下操作(我将applicationDidBecomeActive
方法延迟观察它):
1.显示黑屏(加载)
2.执行applicationDidBecomeActive
并打开LED(我把延迟放在这里)
3.显示我的当前UIViewController
和同时关闭LED
只有在它被发送后立即从后台调用应用程序后才会发生.我知道这不是现实的用例场景,但我喜欢认为错误常常"堆积",并且由于这种(可能)糟糕的设计,我将来可能会遇到其他问题.我绝对相信这不是我的代码关闭LED,因为NSLog
每当我的代码修改AVCaptureDevice.torchMode
属性.所以,确切地说,我的问题是:
什么方法被调用applicationDidBecomeActive
,可能与之相关,可能UIViewController
会关闭我的火炬?是否有任何可能的解决方案或解决方案?
.net ×1
c# ×1
flashlight ×1
generics ×1
inheritance ×1
interface ×1
ios ×1
ios4 ×1
multitasking ×1
objective-c ×1