关于使用字段、方法和属性的问题
//先定义一个类
public class MyClass
{
public readonly string Name;
private int intVal;
public int Val
{
get
{
return intVal;
}
set
{
if (value >= 0 && value <= 10)
intVal = value;
else
throw (new ArgumentOutOfRangeException("Val", value,
"Val must be assigned a value between 0 and 10."));
}
}
public int MyInt
{
get
{
throw new System.NotImplementedException();
}
set
{
}
}
public override string ToString()
{
return "Name: " + Name + "\nVal: " + Val;
}
private MyClass()
: this("Default Name")
{
}
public MyClass(string newName)
{
Name = newName;
intVal = 0;
}
}
//以下是主程序
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Creating object myObj..");
MyClass myObj = new MyClass("My Object");
Console.WriteLine("myObj created.");
for (int i = -1; i <= 0; i++)
{
try
{
Console.WriteLine("\nAttempting to assign {0} to myObj.Val..",
i);
myObj.Val = i;
Console.WriteLine("Value {0} assigned to myObj.Val.", myObj.Val);
}
catch (Exception e)
{
Console.WriteLine("Exception {0} thrown.", e.GetType().FullName);
Console.WriteLine("Message:\n\"{0}\"", e.Message);
}
}
Console.WriteLine("\nOutputting myObj.ToString()..");
Console.WriteLine(myObj.ToString());
Console.WriteLine("myObj.ToString() Output.");
Console.ReadKey();
}
}
这是C#入门经典的例题。
我的问题是:
1 程序执行的顺序是先执行main函数,然后调用到 myclass类的吗?
2 private MyClass()
: this("Default Name")
{
}
public MyClass(string newName)
{
Name = newName;
intVal = 0;
}
这两个都是构造函数,一个私有一个公共,有什么区别?
3 myObj.Val = i,其实就是把i的值赋给类中的value,对吧?myObj.Val是myObj的一个属性,对吧?为什么value在类中不需要声明?
4 MyClass myObj = new MyClass("My Object");是把My Object作为参数传递给 public MyClass(string newName)吗?
5 执行MyClass myObj = new MyClass("My Object")时,调用到了Myclass类,在调用时,是按照什么顺序执行代码的?
6 在mian函数执行的过程中,为什么一开始执行到
Console.WriteLine("Creating object myObj..");
MyClass myObj = new MyClass("My Object");
Console.WriteLine("myObj created.");
的时候,第二句貌似没有被执行?
7 为什么我有时候修改一些代码,然后直接关闭编辑器,居然没有提示让我保存呢?比如我去掉一下无用的类,或者添加一些类的文件夹,系统居然不提示我保存?
问题比较多,谢谢大家!!
[解决办法]
1。程序执行的顺序是先执行main函数,然后构造myclass类的实例。
2。私有构造函数只能在本类中调用,公有的可以由其它类调用。
3。value是上下文关键字,隐式代表set属性时的参数,不需要声明。
4。MyClass myObj = new MyClass("My Object");是把“My Object”字符串作为参数传递给 public MyClass(string newName)
5。类的初始化顺序:静态字段、静态构造方法、实例字段、实例构造方法。在你的例子中,就是执行 public MyClass(string newName) 这一个方法
6。第二句当然会执行,没有貌似。
7。天知道,vs坏掉了?