使用"as"关键字会丢失对象初始化

Tah*_*ine 1 c# as-keyword

我正在使用派生类并使用as关键字将基类强制转换为它.当我这样做时,正在调用派生类构造函数,并且它的对象已初始化,但派生实例不会以初始化对象结束(具有空值).这是一个代码示例.

// classes
public class Request
{
  public Request();
  public Header Header{get;set;}
}

public class CreateRequest : Request
{
  public Foo Foo{get;set;}
  public Bar Bar{get;set;}

  public CreateRequest():base()
  {
    this.Foo = new Foo();
    this.Bar = new Bar();
  }
}

public class SomeClass
{
  private Response ProcessCreateRequest(Request request)
  {
    // request comes from a json request
    CreateRequest createRequest = request as CreateRequest;
    // values of Foo and Bar are null
    [...]
  }
}
Run Code Online (Sandbox Code Playgroud)

是"as"通常用于派生 - >基础而不是基础 - >派生的问题还是在这里有其他工作吗?

Ste*_*owe 7

直到jon双向飞碟出现才能正确回答这个问题,据我所知,'as'关键字只是一种强制转换的方式,如果演员表无效则会抑制异常; 它不应该自己调用任何构造函数

那么你有没有验证(例如在调试器中)传入的对象在强制转换之前是否已正确初始化?