静态Static(C#)

来源:互联网 发布:idc联想数据 编辑:程序博客网 时间:2024/06/10 23:27

静态可以修饰字段,属性,方法,构造函数,类。

1.静态字段(与之相对的是实例字段,也可以成为非静态字段)

C#中没有全局变量和全局函数的说法,如果找相之于等价的就可以认为是静态字段和静态方法了。

类中声明静态字段,那么类的所有实例都共享这个字段,这对于一些用于计数的字段再好不过,同时可以减少内存的

耗。

因为静态字段被类的所有实例所共享,那么一般定位为Public。同时在声明是可以初始化,但是未初始化,它依然有

己的默认值。

静态字段,从属于类,所以说需要直接用类来访问静态字段。


2.静态属性

说到底静态字段定义为Public,那么在任何地方都可以被调用,所以给字段做一定程度的封装才好,那么自然会有静

属性这一说了。


3.静态方法

同静态字段一样,不可以被类的实例引用,必须由类直接调用。

静态方法中的实例字段是不可以直接访问的,必须先对类进行实例化,然后才能通过类的实例去访问实例字段和实例

方法。

当然,有人想我在静态类中的静态方法呢?哈哈,静态类是不允许你声明实例字段和方法的,所以不存在这样的问

题。详情见下面的静态类的说明。


4.静态构造器

感觉怪怪的,以前我都没听说过这。此构造器直接对类进行初始化,要说什么时候调用呢?只能说在首次访问类的时

候,还有就是静态构造器不能显式调用,那么这也就说明你给它设一百个参数都是没用的,不显式调用一切都是白搭

,所以说静态构造器不允许任何参数。

再者上面说的首次访问类的时候可能发生在各种情况下,所以使用应当注意。

作用:静态数据初始化


5.静态类

不能实例化,意味着类中声明上百上千个实例字段或者方法是没有用的(注意是实例)

静态类会被编译器自动标记为sealed和abstract,指定其不可扩展,所以不能被继承。


下面用代码来说明(比较粗糙):

XAML:

<Page    x:Class="Hodgepodge.BlankPage1"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:local="using:Hodgepodge"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    mc:Ignorable="d">    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">        <StackPanel>            <TextBlock x:Name="txtblk1" FontSize="50" Text="Static" HorizontalAlignment="Center" />            <TextBlock x:Name="txtblk2" FontSize="30" />            <TextBlock x:Name="txtblk3" FontSize="30" />            <TextBlock x:Name="txtblk4" FontSize="30" />            <TextBlock x:Name="txtblk5" FontSize="30" />            <TextBlock x:Name="txtblk6" FontSize="30" />        </StackPanel>    </Grid></Page>

.CS:

using Windows.Foundation;using Windows.UI;using Windows.UI.Popups;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Media;using Windows.UI.Xaml.Shapes;// “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=234238 上提供namespace Hodgepodge{    /// <summary>    /// 可用于自身或导航至 Frame 内部的空白页。    /// </summary>    public sealed partial class BlankPage1 : Page    {        public BlankPage1()        {            this.InitializeComponent();            SurfaceBook surfaceBook = new SurfaceBook();            surfaceBook.Festival = "双十二";            txtblk2.Text = "原价:"+ SurfaceBook.Price.ToString();            txtblk3.Text = "节日还是没有变化(请注意其区别):" + surfaceBook.Festival;            txtblk4.Text = "现价:"+ SurfaceBook.CutPrice();            txtblk5.Text = "我原来的电脑是:" + Computer.Brand;            txtblk6.Text = "我现在的电脑是:" + Computer.UpGrade();        }        public static class Computer        {            //错误:不能再静态类中声明实例成员            //public string Brand { get; set; }            //正确:定义的是静态成员            private static string _Brand = "Dell";            //运用静态属性对静态字段进行封装            public static string Brand            {                get                {                    return _Brand;                }                set                {                    _Brand = value;                }            }            static Computer()            {                Brand = "Mac";            }            public static string UpGrade()            {                if(Brand.Equals("Mac"))                {                    Brand = "Surface";                }                return Brand;            }        }        //错误:无法从静态类Computer派生出SurfaceBook        //public class SurfaceBook : Computer { }        public class SurfaceBook        {            private static int _Price;            public static int Price            {                get                {                    return _Price;                }                set                {                    _Price = value;                }            }            private string _Festival;            public string Festival            {                get                {                    return _Festival = "双十一";                }                set                {                    _Festival = value;                }            }            public SurfaceBook()            {                Price = 10000;            }            public static string CutPrice()            {                //错误:在静态方法中无法直接访问类的实例字段或实例方法,必须先实例化类                //if(Festival.Equals("双十一"))                SurfaceBook surfaceBook = new SurfaceBook();                if(surfaceBook.Festival.Equals("双十一"))                {                    Price = 8000;                }                return "微软SurfaceBook大降价:"+surfaceBook.Festival+"只卖"+Price;            }        }    }}

运行截图:

以上代码涉及到了Static的相关方面,但是还有其他很多方面也设计到了,对于代码的进一步说明可以在下一篇博客

中解释。

0 0