public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Book b = new Book();
        b.Fiction = false;
        b.All();
    }
}public class Book
{
    private bool fiction;    public bool Fiction
    {
        set
        {
            fiction = value;
        }
        get
        {
            bool zz = true;
            return zz;
        }
    }    public void All()
    {
        System.Web.HttpContext.Current.Response.Write(Fiction);
        //如果取的是Fiction则显示true;
        //System.Web.HttpContext.Current.Response.Write(fiction);
        //把上面的Fiction改为fiction则显示的是false;
        //为什么会这样显示?内部的运行机制是什么啊?
    }
}

解决方案 »

  1.   

    你get的时候返回的值一直为true,因为返回的是zz,不是fiction而set的时候设置的是fiction,为false,所以换成fiction时返回false
      

  2.   

    System.Web.HttpContext.Current.Response.Write(Fiction);相当于:
    bool b = Fiction;//此时调用了get,get中始终返回true
    System.Web.HttpContext.Current.Response.Write(b);而System.Web.HttpContext.Current.Response.Write(fiction);没有调用get,就返回fiction的值(false)如果改成:
        public bool Fiction
        {
            set
            {
                fiction = value;
            }
            get
            {
                return fiction;
            }
        }
    二者显示就一样了。
      

  3.   

    Fiction是Book的属性,访问这个属性的时候会调用Fiction的get访问器,而这个get返回的始终都是zz的true值,而如果Write(fiction)的时候则调用的直接就是Book的私有字段fiction的值,而这个值你已给了它False,所以就会出现Write(Fiction)为true,Write(fiction)为False的情况.
      

  4.   

    改成
    public class Book
    {
        private bool fiction;    public bool Fiction
        {
            set
            {
                fiction = value;
            }
            get
            {
                return fiction;
            }
        }