我经常使用"使用"阻止处置对象。 今天,我使用HttpWebRequest发布数据,我感到两种方法之间的混淆。
方法1:
public class ActivityTwo extends AppCompatActivity {
EditText tlfNoAlani;
TextView tvAdSoyad;
Button btnGeri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
tlfNoAlani = (EditText) findViewById(R.id.tlfnoalani);
tvAdSoyad = (TextView) findViewById(R.id.tvadsoyad);
btnGeri = (Button) findViewById(R.id.btngeri);
Bundle extras = getIntent().getExtras();
if (extras != null) {
tvAdSoyad.setText("Merhaba " + extras.getString("isim") + " " + extras.getString("soyisim"));
}
btnGeri.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent data = new Intent();
String returnString = tlfNoAlani.getText().toString();
data.putExtra("returnData", returnString);
setResult(RESULT_OK, data);
finish();
}
});
}
}
方法2:
var request = (HttpWebRequest)WebRequest.Create("http://www...");
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(JsonConvert.SerializeObject(content));
}
在方法2中,使用""中的所有流和streamwirter块,所以肯定会被处置。但是在方法1中,我不确定流 request.GetRequestStream() 将被处置。有谁可以向我解释一下?非常感谢!
答案 0 :(得分:9)
基本上,它取决于两件事:
StreamWriter
构造函数在传递非null Stream
引用时是否会抛出异常 - 我认为在这种情况下不会。 (如果流是只读的,那么......将不会丢弃流。)StreamWriter.Dispose
是否处理基础流 - 而且确实如此,除非您调用明确允许您控制的constructor overload 所以基本上,我认为在这种情况下它是安全的......当你的using
语句处理StreamWriter
时,会处理Stream
。
然而,如评论中所述,使用两个using
语句意味着您无需执行此类推理。
答案 1 :(得分:5)
包裹StreamWriter
的{{1}}会在关闭时关闭该流。请参阅docs。
答案 2 :(得分:-2)
两者都是一样的。由于使用块处理整个对象,甚至是匿名对象。