C#中需要注意的地方积累
非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。
比如下面的例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConAttribute
{
class Program
{
//[Obsolete("此方法已经过时了,请使用新的方法")]
public static void Display()
{
//ShowMsg()//报错非静态的字段、方法或属性"ConAttribute.Program.ShowMsg()要求对象引用
ShowWelcome();//在静态函数中调用静态函数,正确
}
public void ShowMsg()
{
Display();//在非静态函数中调用静态函数,正确;
}
public static void ShowWelcome()
{
Console.WriteLine("上海蒙融技术有限公司欢迎您!");
}
public static void Display<T>(T msg)
{
Console.WriteLine(msg.ToString());
}
static void Main(string[] args)
{
Program p = new Program();
Program.Display<string>("http://www.mronginfo.com");//输出http://www.mronginfo.com
Program.Display<int>(100);//输出100;
Program.Display<double>(100.1);//输出100.1
Display();
Console.Read();
}
}
}
C#中初始化参数的时候是按照顺序的。比如下面的代码会出现异常,因为COUNTMEMBERS还没有赋值就 构造mems数组了。应该将其移到private static int COUNTMEMBERS = 9的下面 private static int[] mems = new int[COUNTMEMBERS];
public static void DisplayString(object[] strNames) { foreach (var item in strNames) { Console.WriteLine(item.ToString()); } } static void Main(string[] args) { string[] conParams = new string[] { "小辣椒", "白色" }; DisplayString(conParams);//注意传递的conParams类型为string没有问题 Console.WriteLine("finished"); Console.Read(); } } 相反如果下面的例子就会报错 public static void DisplayString(string[] strNames) { foreach (var item in strNames) { Console.WriteLine(item.ToString()); } } static void Main(string[] args) { object[] conParams = new object[] { "小辣椒", "白色" }; DisplayString(conParams);//注意此时conParams的类型为object Console.WriteLine("finished"); Console.Read(); } }
private static int COUNTMEMBERS = 9; private static int MINVALUE = 1; private static int MAXVALUE = 9; private static int VALUE = 45; private static int level = 0;