class MyClass
{
void PrintDateAndTime() // Declare the method.
{
DateTime dt = DateTime.Now; // Get the current date and time.
Console.WriteLine( "{0}", dt ); // Write it out.
}
static void Main() // Declare the method.
{
MyClass mc = new MyClass();
mc.PrintDateAndTime(); // Invoke the method.
}
}
请问,静态方法Main不是访问了本类的实例成员mc.PrintDateAndTime()么??
这个不是和帖子开头我看到的那句话矛盾了,新手求学长学姐们一语戳破!!!
静态方法 实例方法
--------------------编程问答--------------------
MyClass mc = new MyClass();
mc.PrintDateAndTime();
如果改成这样呢?
static void PrintDateAndTime() // Declare the method.
{
DateTime dt = DateTime.Now; // Get the current date and time.
Console.WriteLine( "{0}", dt ); // Write it out.
}
加要static才可以调用
--------------------编程问答--------------------
我多问一下,PrintDateAndTime是私有的, Main可以通过实例一个mc访问PrintDateAndTime 感觉还是很奇怪,难道不要求 PrintDateAndTime变成 public
--------------------编程问答--------------------
静态方法不可以直接访问实例变量
class MyClass
{
void PrintDateAndTime() // Declare the method.
{
DateTime dt = DateTime.Now; // Get the current date and time.
Console.WriteLine( "{0}", dt ); // Write it out.
}
public MyClass mc = new MyClass();
public int mcc = 1234;
static void Main() // Declare the method.
{
mc.PrintDateAndTime(); // Invoke the method.
mcc = 3743;
}
}
它的“访问实例变量”是这个意思,是指 mc 和 mcc。不是什么 PrintDateAndTime。
--------------------编程问答--------------------
PrintDateAndTime()是静态方法中实例化出来的mc对象的方法。
所以并不矛盾。
我多问一下,PrintDateAndTime是私有的, Main可以通过实例一个mc访问PrintDateAndTime 感觉还是很奇怪,难道不要求 PrintDateAndTime变成 public
不需要。
public 是给别的类访问而声明的,自己的类内访问只要 private 可访问到就行。
--------------------编程问答--------------------
静态方法main能访问实例方法,是因为你初始化了改对象,那么就可以通过该实例对象来访问该实例方法了
但是你在main中如果没有实例该对象那么你是无法直接访问该实例方法的,因为静态方法只能够不存在隐藏的指向实例对象的this指针,所以静态方法只能范围静态变量和静态方法,但是实例方法却没有该限制,这是因为静态变量和方法是属于类级别的,简单说可以认为是所有该类的实例同享的数据