静态与公共财产

时间:2014-09-03 09:57:14

标签: c# asp.net-mvc

我是在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");
    }
}

好的thx为您的答案!我被读了,我写了另一个代码,仍然没有工作....我知道问题在哪里,但我不知道如何解决它们; /如果你能帮助我,我会很高兴:)

我的模特:

 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中增加日期。

3 个答案:

答案 0 :(得分:1)

变量的静态限定符意味着变量定义一次。如果没有静态限定符,则每次创建类的实例时都将定义变量。 例如:

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

答案 1 :(得分:1)

问题应该是静态与实例属性。功能是两者之间的基本差异。静态属性在类的所有对象之间共享。因此,每当您发出新请求时,都会创建一个新的控制器类实例。由于属性是静态的,因此控制器的新实例可以获取和设置它。但是,在实例变量的情况下,属性也是新的,并在创建控制器的新实例时初始化。

答案 2 :(得分:0)

无论何时编写函数或声明变量,在创建类的对象之前,它都不会在内存中创建实例。但是如果使用static修饰符声明任何函数或变量,它会直接在内存中创建实例并全局操作。 static修饰符不引用任何对象。 因此它们就像是内存中的单个副本,由所有人共享。 您应该仅将静态变量用于应用程序的硬编码值。 请参阅此内容以获得更多说明 What is the use of static variable in C#? When to use it? Why can't I declare the static variable inside method?