簡體   English   中英

靜態與公共財產

[英]Static vs public property

我在用MVC編寫代碼,但我不了解我項目中的行為公共屬性! 我的代碼非常簡單,增加了屬性。 當我點擊按鈕時,屬性將被覆蓋。 僅當我具有STATIC屬性時它才起作用,但是當我具有PUBLIC時,增量不起作用。 公共財產是否轉瞬即逝? 您能幫我理解一下嗎,它是我的控制器:

  public class DatsController : Controller
{
    // GET: Dats
    Dats dats;
    static public int _Var
    {
        get; set;
    }
    public DatsController()
    {           
            dats = new Dats();      
    }

    public ActionResult Index()
    {
         if (Request.HttpMethod == "post")
         {
             ViewBag.zmienna = _Var;
             dats.dayToday = DateTime.Now.Date;

         }
         else
         {
            // var = var + 5;
             ViewBag.zmienna = _Var;
         }

        return View();
    }

    public ActionResult Next()
    {
        _Var = _Var + 5;
        //dats.firstDayWeek = data.firstDayWeek.AddDays(7);
        return RedirectToAction("Index", "Dats");
    }
}

好的,謝謝您的回答! 我被閱讀了,我被寫了另一個代碼,但仍然無法正常工作。...我知道問題出在哪里,但我不知道如何解決; /如果您能幫助我,我會很高興的:)

我的模特:

 public class Dats
{
     static private DateTime _dataToday;
     static private DateTime _firstDayWeek;
     static private DateTime _lastDayWeek;

     static public DateTime DayToday { get { return _dataToday = DateTime.Now.Date; } }
     static public DateTime FirstDayWeek { get { return _firstDayWeek = Dats.pierwszyDzienTygodnia(_dataToday); } set { _firstDayWeek = value; } }
     static public DateTime LastDayWeek { get { return _lastDayWeek = Dats.ostatniDzienTygodnia(_dataToday); } set { _lastDayWeek = value; } }

    static public DateTime pierwszyDzienTygodnia(DateTime data)
    {

        int dzien = DayOfWeek.Monday - data.DayOfWeek;
        if (dzien > 0)
        {
            dzien -= 7;
        }
        return data.Date.AddDays(dzien);
    }
    static public DateTime ostatniDzienTygodnia(DateTime data)
    {
        DateTime ostatniDzien = pierwszyDzienTygodnia(data.Date);
        return ostatniDzien.Date.AddDays(6);

    }

}

我的控制器:

public class DatsController : Controller
{

    public ActionResult Index()
    {

         return View();
    }

    public ActionResult Next()
    {
        Dats.FirstDayWeek = Dats.FirstDayWeek.AddDays(7);
        return RedirectToAction("Index", "Dats");
    }
}

我的觀點:

@using (Html.BeginForm("Next", "Dats", FormMethod.Post))
{
    <button type="submit">Next</button>
    @*@Html.ActionLink("dalej","Next", "Visits",new {data =7})*@

    <dl class="dl-horizontal">
        @Dats.DayToday
        <dd>@Dats.FirstDayWeek</dd>
        <dd>@Dats.LastDayWeek</dd>
    </dl>
}

我想增加我的屬性firstDayWeek中的日期。

變量的靜態限定符意味着該變量僅定義一次。 如果沒有靜態限定符,則每次創建類的實例時都將定義變量。 例:

class A{
  public static int c;
};
class B{
  public int c;
}

A a = new A();
a.c =0;
a.c++;//1
A aa = new A();
aa.c++;//2

B b= new B();
b.c++;//1;
B bb = new B();
bb.c++;//1

問題應該是“靜態與實例”屬性。 功能是兩者之間的基本區別。 靜態屬性在該類的所有對象之間共享。 因此,無論何時發出新請求,都會創建控制器類的新實例。 由於該屬性是靜態的,因此控制器的新實例可以獲取和設置它。 但是,對於實例變量,該屬性也是新的,並在創建控制器的新實例時進行初始化。

每當您編寫一個函數或聲明一個變量時,它都不會在內存中創建實例,直到您創建類的對象為止。 但是,如果您使用static修飾符聲明任何函數或變量,它將直接在內存中創建實例並全局作用。 靜態修飾符不引用任何對象。 因此,它們就像內存中的單個副本,被所有人共享。 您應僅將靜態變量用於應用程序的硬編碼值。 有關更多說明,請參考此內容。C#中靜態變量的用途是什么? 什么時候使用? 為什么我不能在方法內部聲明靜態變量?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM