【发布时间】:2015-03-12 11:44:02
【问题描述】:
向同事提出挑战,是否有任何方法可以将结构转换为类,这里是我们尝试过的示例
namespace ConsoleApplication22
{
class Program
{
static void Main(string[] args)
{
IFoo fooS = new FooStruct();
fooS.Val = 5;
FooClass foo =(FooClass) fooS;
}
}
public interface IFoo
{
int Val { get; set; }
}
public struct FooStruct : IFoo
{
public int Val { get; set; }
}
public class FooClass : IFoo
{
//public FooClass(int val)
//{
//}
private int val;
public int Val
{
get { return val; }
set { val = value; }
}
}
}
但我们得到了一个无效的强制转换异常:D
鉴于接口是引用类型而类是引用类型并且类实现了接口,是否有任何棘手的方法可以提取接口并将其分配给类
【问题讨论】:
-
强制转换在编译时和运行时通过类型检查进行验证。旧的“通过接口神奇地将一种类型转换为另一种”路线已经很好地涵盖了,并且与
struct或class类型没有什么关系。 -
在你关闭问题之前等待我认为它已经足够清楚了
-
@AdamHouldsworth 你的意思是在这种情况下不可能进行铸造
-
答案也很明确。这是不可能的,因为除非您实现了自定义转换运算符(如果有记忆,它不适用于接口),否则无法从类型转换为完全不相关的类型。转换的方法有很多,但转换意味着涉及类型层次结构。
-
是的。就像您无法成功地将
int转换为string一样。您也许可以将其 看起来 像使用implicit或explicit转换运算符应用于其中一种类型的转换。
标签: c# inheritance struct interface casting