今天早上看一段rss解析的代码,发现竟然可以这样写:
internal class RssDownloadManager {
static RssDownloadManager _theManager = new RssDownloadManager();
我晕啊,头一次见到这种写法,为什么要在一个类的内部定义它自己的对象呢?
现在终于搞明白了,静态方法中是不能直接调用类中的任何非静态成员(包括数据和方法),如果想调用,有两种办法:
一是干脆把要调用的转化成静态方法。
二是在静态方法中new一个对象,然后调用方法。或者在静态方法的外部定义一个静态的对象,在静态方法里面
调用该静态对象的方法。
而上面的做法显然就是这样了。只不过调用的是自己的非静态方法,所以就new一个自己了。
举个例子:
public class Program
{
public int count = 0;
public static Program dkddd = new Program();
static void Main(string[] args)
{
dkddd.GetDatetime();
//Program aa = new Program();
//string str = aa.GetDatetime();
//string str = Program.GetYear();
//count = 5;
Console.WriteLine(str);
}
public string GetDatetime()
{
//this.GetYear();
GetYear();
return System.DateTime.Now.ToString();
}
public static string GetYear()
{
return System.DateTime.Now.Year.ToString();
}
}
得到的启示:如果一个类中的静态方法想调用某个类的非静态方法,则一个非常常见的方式就是像这样:
internal class RssDownloadManager {
static RssDownloadManager _theManager = new RssDownloadManager();
internal class RssDownloadManager {
static RssDownloadManager _theManager = new RssDownloadManager();
我晕啊,头一次见到这种写法,为什么要在一个类的内部定义它自己的对象呢?
现在终于搞明白了,静态方法中是不能直接调用类中的任何非静态成员(包括数据和方法),如果想调用,有两种办法:
一是干脆把要调用的转化成静态方法。
二是在静态方法中new一个对象,然后调用方法。或者在静态方法的外部定义一个静态的对象,在静态方法里面
调用该静态对象的方法。
而上面的做法显然就是这样了。只不过调用的是自己的非静态方法,所以就new一个自己了。
举个例子:
public class Program
{
public int count = 0;
public static Program dkddd = new Program();
static void Main(string[] args)
{
dkddd.GetDatetime();
//Program aa = new Program();
//string str = aa.GetDatetime();
//string str = Program.GetYear();
//count = 5;
Console.WriteLine(str);
}
public string GetDatetime()
{
//this.GetYear();
GetYear();
return System.DateTime.Now.ToString();
}
public static string GetYear()
{
return System.DateTime.Now.Year.ToString();
}
}
得到的启示:如果一个类中的静态方法想调用某个类的非静态方法,则一个非常常见的方式就是像这样:
internal class RssDownloadManager {
static RssDownloadManager _theManager = new RssDownloadManager();