静态与公共财产

本文关键字:财产 静态 | 更新日期: 2023-09-27 18:20:38

我在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#中静态变量的用途是什么?何时使用?为什么可以';我在方法内部声明静态变量吗?