1.修饰方法:表示该方法为该类所有,通过类名.方法调用。静态方法不能调用非静态方法,非静态方法可以调用静态方法。
2.修饰变量:(静态数据可以直接赋值,如果需要从外面文件获取可以使用静态构造函数。静态变量为所有该类的对象共享)
a.一个类只能有一个静态构造函数
b.只会初始化一次,优先级别高于其它构造函数
c.静态构造函数方法名不能加任何的修饰符,不能有参
3.修饰类:又称为工具类,无需实例化对象,直接通过类名调用(类名.方法)。静态类只能包含静态成员。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StaticMethod
{
public class People
{
//静态方法应用场景:
//通过Random函数随机产生一个数字,返回该下标对应的字符串
static Random r = new Random();
static int GetIndex(short upper)
{
return r.Next(upper);
}
//静态方法不能调用非静态方法,非静态方法可以调用静态方法
public static string Complain()
{
string[] str = {"I love you","I hate you" ,"I feel good","I feel bad","I like eat furit","I hate raining"};
return str[GetIndex(6)];
}
}
public class SaveCount
{
//静态成员
//应用场景 银行账户有存款和利率,利率每个账户都会用到,是公共数据
public double money;
public static double rate;//可以直接赋值,也可以使用静态构造函数
public SaveCount(double money)
{
this.money = money;
Console.WriteLine("money constructor");
}
static SaveCount()
{
rate = 0.04;
Console.WriteLine("static constructor");
}
public double GetRate()
{
return rate;
}
public void SetNewRate(double newrate)
{
rate = newrate;
}
}
static class UtillDate
{
//静态类
//应用场景 静态日期类经常被别的类调用,返回当前时间和日期
public static string GetTodyDate()
{
return DateTime.Today.ToLongDateString();
}
public static string GetTodyTime()
{
return DateTime.Now.ToLongTimeString();
}
}
class Program
{
static void Main(string[] args)
{
#region===1.静态方法===
for (int i = 0; i < 6; i++)
Console.WriteLine(People.Complain());
#endregion
#region===2.静态数据可以直接赋值,也可通过构造函数初始化===
SaveCount s1 = new SaveCount(100.5);
Console.WriteLine("s1余额:{0} 利率:{1}",s1.money,s1.GetRate());
SaveCount s2 = new SaveCount(200.3);
Console.WriteLine("s2余额:{0} 利率:{1}", s2.money, s2.GetRate());
s2.SetNewRate(0.06);
#endregion
#region===3.静态类 调用方式 类名.方法===
Console.WriteLine("今天日期:{0} 当前时间:{1}", UtillDate.GetTodyDate(), UtillDate.GetTodyTime());
#endregion
Console.ReadKey();
}
}
}