我有继承和泛型的问题.这是解释我的问题的代码:
namespace TestApplication
{
public class MyClass<T>
{
private T field;
public MyClass(T field)
{
this.field = field;
}
}
public class MyIntClass : MyClass<int>
{
public MyIntClass(int field)
: base(field)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试做这样的事情时:
MyClass<int> sth = new MyClass<int>(10);
MyIntClass intsth = (MyIntClass) sth;
Run Code Online (Sandbox Code Playgroud)
我收到强制转换异常:无效的强制转换异常.无法将'TestApplication.MyClass`1 [System.Int32]'强制转换为'TestApplication.MyIntClass'.
更有甚者,我无法创建强制转换运算符:
public static implicit operator MyIntClass(MyClass<int> myClass)
Run Code Online (Sandbox Code Playgroud)
因为:'TestApplication.MyIntClass.implicit运算符TestApplication.MyIntClass(TestApplication.MyClass)':不允许在基类之间进行用户定义的转换
我需要创建如上所述的强制转换.我不知道为什么我不能从基类类型转换.我怎么解决这个问题?提前致谢.
编辑
谢谢你的回答.现在我看到我无法从基类转换为派生类,我发现它与泛型没有任何关系.但为什么我不能从基类创建用户定义的转换?我有一个返回基类的方法.我能够定义转换方法,但创建一个转换操作符imho将是一个更好的解决方案.
我试图继承NSOutlineView.这是我的代码:
OutlineViewSublcass.h:
#import <Cocoa/Cocoa.h>
@interface OutlineViewSubclass : NSOutlineView {
}
@end
Run Code Online (Sandbox Code Playgroud)
OutlineViewSubclass.m:
#import "OutlineViewSubclass.h"
@implementation OutlineViewSubclass
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
printf("debug A\n");
return self;
}
- (void)awakeFromNib
{
printf("debug B\n");
}
@end
Run Code Online (Sandbox Code Playgroud)
调试输出是:
debug B
Run Code Online (Sandbox Code Playgroud)
为什么不(id)initWithFrame:(NSRect)frame被召唤?
我希望我的网站根据设备位置更改其布局.该站点有2种布局类型:垂直(高度>宽度)ang水平(宽度>高度).
你看到任何解决方案吗?
upd:我没有看到更改站点布局的任何复杂性.我想知道是否有任何事件需要处理.ps如果我将设备旋转90度,iphone的浏览器会改变它的方向吗?Dave,tnx进行校对.
在开始开发桌面应用程序之前,我想知道如果我在.NET中构建它会有多大的安装程序?
现在.NET可能已经有5年了.我们还需要在应用程序中包含运行时间吗?或者我们可以假设大多数用户会在他们的系统上安装它吗?Vista是否预装了.NET?最后我们可以安全地假设大多数XP用户已经在他们的系统上安装了CLR吗?
为什么新的运算符存在于C#和Java等现代语言中?它纯粹是一个自我记录的代码功能,还是它可以用于任何实际目的?
例如以下示例:
Class1 obj = new Class1();
Class1 foo()
{
return new Class1();
}
Run Code Online (Sandbox Code Playgroud)
像Pythonesque写的那样容易阅读:
Class1 obj = Class1();
Class1 foo()
{
return Class1();
}
Run Code Online (Sandbox Code Playgroud)
不久前,我问了一个关于$的问题,并得到了有用的答案 - 事实上,我以为我明白了如何使用它.
看来我错了:(
此示例显示在教程中:
instance Monad [] where
xs >>= f = concat . map f $ xs
Run Code Online (Sandbox Code Playgroud)
我不能为我的生活看到为什么在那里使用$; ghci也没有帮助我,因为我在那里进行的测试似乎表明与简单省略$的版本等效.有人可以为我澄清一下吗?
在Grails域类中,如何为String字段设置约束,使其MySQL列类型为TEXT或LONGTEXT?
到目前为止,我最好的方法是设置约束的大小:
myTextField(size:0..65535)
Run Code Online (Sandbox Code Playgroud)
这导致TEXT
myTextField(size:0..2147483646)
Run Code Online (Sandbox Code Playgroud)
结果在LONGTEXT(2147483646 = 2 ^ 32/2 - 1 - 1)
是否有更清洁的方式来指定大小?基本上我想要全系列的TEXT或LONGTEXT,而不必硬编码一堆大小的值.
我有两个具有相同结构的JSON对象,我想使用Javascript将它们连接在一起.是否有捷径可寻?
我想知道是否有人在那里有WPF应用程序开发的经验 - 也许更有趣 - 在生产中运行WPF.
它是否足够成熟,可用于大型项目?有哪些明显的陷阱?任何最佳做法?(WPF中的数据绑定看起来很漂亮,但是它可以在"真正的"项目中运行吗?)
提前致谢!
我希望能够将某些内容传递给SQL查询,以确定是否只选择某个列为null的那些查询.如果我只是构建一个查询字符串而不是使用绑定变量,我会做类似的事情:
if ($search_undeleted_only)
{
$sqlString .= " AND deleted_on IS NULL";
}
Run Code Online (Sandbox Code Playgroud)
但我想使用绑定查询.这会是最好的方式吗?
my $stmt = $dbh->prepare(...
"AND (? = 0 OR deleted_on IS NULL) ");
$stmt->execute($search_undeleted_only);
Run Code Online (Sandbox Code Playgroud)