あるべきではないと思うときに、変数が参照によって渡されているように動作するコードがいくつかあります。
クラスライブラリで私は持っています
public class ListingHelper
{
public static List<FilterCategory> getListingFilterCertifications(ListingCategory parentListingCategory, ListingFilters filters)
{
...//Building up return object
filters.gradingServiceId = 2;
}
}
ページのpageLoadでは、これを次のように呼び出します。
private void BindForm()
{
ListingFilters filters = new ListingFilters();
filters.gradingServiceId = 0;
if (filters.gradingServiceId > 0)
{
listCertification.DataSource = ListingHelper.getListingFilterCertificationById(filters.gradingServiceId);
listCertification.DataBind();
}
}
ライブラリ内のメソッドの呼び出しから戻ったときは0になるはずだと思っていfilters.gradingServiceId
ましたが、2として戻ってきました。静的メソッドへのメソッドパラメーターは本当に参照によって渡されますか?
フィルターのリスト:
public class ListingFilters
{
public String state { get; set; }
public int categoryId { get; set; }
public int gradingServiceId { get; set; }
public int gradeId { get; set; }
}
編集
リンクジョンをありがとう。したがって、.netでは、ユーザーが作成したすべてのクラスは参照型であり、値で渡された場合でも、実際にはオブジェクトのコピーを送信するのではなく、メモリ内のその場所へのポインターを送信します。
その場合、フィルターオブジェクトのコピーをメソッドに渡して、値をいじり、それを呼び出したコードで影響を受けないようにするにはどうすればよいでしょうか。