静态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的相关方面,但是还有其他很多方面也设计到了,对于代码的进一步说明可以在下一篇博客
中解释。
- 静态Static(C#)
- 类静态成员static(C++)
- 类静态成员static(C++)
- object-c的静态变量(static)
- C语言中的静态(static)函数
- C++static静态数据成员
- C++static静态成员函数
- C/C++面试题:static(静态)变量的作用
- C++(笔记)深浅拷贝and静态static基础练习
- Static(静态)
- 静态(static)总结
- 静态函数(static)
- 静态方法 (static)
- static(静态)关键字
- static(静态)变量
- c++静态成员小结,c++,static
- c++静态成员小结,c++,static
- c++静态成员小结,c++,static
- ubuntu下把微信的amr音频格式转换为 mp3格式
- ZOJ 1563 Pearls(一个物品和他之前的组合情况)
- git删除文件所有历史版本
- 工欲善其事,必先利其器--phper的sublime text3
- ERP见面会
- 静态Static(C#)
- leetcode 48:Rotate Image
- [2033 ] :人见人爱A+B
- JUnit4入门
- LeetCode Add Two Numbers(用链表模拟加法)
- 驱动模块和桩模块的概念和区别
- c++primer第五版第十二章12.20习题用一个StrBlobPtr打印出StrBlob中的元素
- Odd-even sort: Sorting by Exchanging
- opencv笔记 1.利用摄像头进行视频文件写入