[英]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.