假设我有两个项目:
一个类库
using System;
namespace Project1
{
public class Foo
{
public Foo(object bar){
Bar = (Bar)bar;
}
public Bar Bar { get;}
}
public class Bar{
public string MyBar {get; set;}
}
}
Run Code Online (Sandbox Code Playgroud)
一个exe
using System;
using Project1;
namespace Project2
{
public class BarTrip
{
public string MyFoo {get;set;}
public static implicit operator Bar(BarTrip trip){
return new Bar{ MyBar = trip.MyFoo };
}
}
public static class Program{
public static void Main(params string[] args){
var trip = new BarTrip(){ MyFoo = "Aaron" };
var foo = new Foo(trip);
Console.WriteLine(foo.Bar.MyBar);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望当我运行我的exe时,BarTrip一旦调用内部Foo构造函数中的转换操作,就会调用我在里面定义的隐式转换操作符.
相反,我收到以下错误:
System.InvalidCastException: Unable to cast object of type 'Project2.BarTrip' to type 'Project1.Bar'.
at Project1.Foo..ctor(Object bar)
at Project2.Program.Main(String[] args) in D:\TestProjects\Project2\src\Project2\Program.cs:line 18
Run Code Online (Sandbox Code Playgroud)
这个错误的原因是什么,如果Project1是黑盒DLL,我该怎么做才能使这个场景可行?
当编译它时,没有类型信息传递给Foo构造函数的上下文,它只是object.那么隐式演员表就没有解决了.显式转换失败,因为没有明确定义的路径.
这似乎是类库中定义的接口的完美案例.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |