Ight,所以我喜欢一个衬垫,而且我已经很好地凝聚了各种各样的东西。出于某种原因,他们让我开心,他们帮助我学习。计算机程序员生活的亮点!
所以无论如何,我需要有一个带有铸造对象分配的帮助:
以下是一个简单属性的示例:
protected InterfaceType Object{
get{ return (InterfaceType)this.Page;} // no red squigglies, works fine
set{ (InterfaceType)this.Page = value; } // red squigglies(left hand of argument must be a variable, property or indexer)
}
但是我可以这样做:
protected InterfaceType Object{
get{ return (InterfaceType)this.Page;} // no red squigglies, works fine
set{ var o = (InterfaceType)this.Page; o = value; } // works fine
}
如果(InterfaceType)this.Page返回一个明显的对象:
return (InterfaceType)this.Page;
我可以把它分配给东西:
var o = (InterfaceType)this.Page;
并为其分配内容:
o = value;
对我来说,我觉得我正在创造一个新的不必要的东西指针;因为如果我可以用它来检索它,下面只是一个指向这个对象的指针:
(InterfaceType)this.Page
答案 0 :(得分:1)
你可能需要在this.page之后删除额外的分号并删除类型转换。
更改
set{ (InterfaceType)this.Page; = value; }
到的
set{ this.Page = value; }
答案 1 :(得分:1)
这里有几个问题。如果this.Page
被声明为InterfaceType
的实例,则根本不需要投射。
这表明您正在尝试将InterfaceType
的实例向下转换为设置者中的Page
类型。显然,这不安全,无论如何你的演员都无法奏效。我会改为:
set { this.Page = (value as WhateverTypePageIs); }
这意味着如果演员表无效,您的setter将不再抛出异常,只会将this.Page
设置为null
。如果这不可取,您可以使用:
set { this.Page = ((WhateverTypePageIs)value); }
哪个仍会抛出异常。
但是,所有这一切都指向了一个更深层次的问题。如果您想拥有setter但将值存储为更具体的类型,则应使Object
与this.Page
的类型相同,这样您就可以对任何调用者明确限制。
答案 2 :(得分:-1)
您必须将表达式的右侧转换为所需类型:
set{ this.Page = (InterfaceType)value; }
但是,读取代码时,Page
完全有可能在继承层次结构中被定义为较小的类型;在这种情况下,不需要演员表:
set { this.Page = value; }