//先定义一个类
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 为什么我有时候修改一些代码,然后直接关闭编辑器,居然没有提示让我保存呢?比如我去掉一下无用的类,或者添加一些类的文件夹,系统居然不提示我保存?
问题比较多,谢谢大家!!
解决方案 »
- Word里插入Excel表出现的问题,新手求解答
- c#操作word文件
- 我需要VS2008和sql2000开发的超市进销存管理系统及源代码。毕业设计用、最后有论文
- 80分求救:同时打开几十个WebBrowser时没有调用show方法却自动显示出来.
- 一个数组,怎样去掉数组里面重复的项?
- 学习C# windows 编程哪本书比较好??
- C# 替换的问题(文件有5M)
- 怎样实时获取单封邮件的上传进度
- 一个关于datagrid很菜的问题?
- Ado.net EF 6.0 使用where的时候生成的SQL中为什么会有子查询
- c# 网页游戏辅助开发 AMF消息问题
- c# webbrowser 如何调用一个js文件里的js方法
2、私有构造函数是对共有构造函数用"Default Name"作为参数传递
3、value在类中不需要声明的原因是:这是属性中的隐藏变量
4、你的思路是正确的
其余几个问题,等别的网友来说
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坏掉了?
第五条回复没动,为什么之执行了public MyClass(string newName) 一个方法?
public override string ToString()
{
return "Name: " + Name + "\nVal: " + Val;
}
private MyClass()
: this("Default Name")
{
}
这两个方法没执行吗?
构造MyClass类时只执行了public MyClass(string newName)这个构造函数。
private MyClass()这个构造函数不会执行。
ToString这个方法会执行到,但是在下面的执行Console.WriteLine(myObj.ToString());的时候。
你可以按F11调试,可以很清楚看到每条语句是怎么执行的。
thanks!!
还有个问题,主要是对构造函数,方法不懂,什么时候执行方法呢?疑问见注释,谢谢。隐藏基类的方法问题
public class MyBaseClass
{
public void DoSomething()
{
Console.WriteLine("A")
}
}public class MyDerivedClass : MyBaseClass
{
public void DoSomething()
{
Console.WriteLine("B")
}
}结果
B
MyDerivedClass myObj =new MyDerivedClass(); // 实例化一个对象myObj通过默认的构造函数,对吧?但是没有执行?就是说没有执行方法。
MyBaseClass myBaseObj;//定义一个类成员,对吗?
MyBaseObj = myObj;// 赋值?这里是啥意思呢?
MyBaseObj.DoSometing(); // 使用了方法,对吧?
MyBaseClass myBaseObj;//定义一个MyBaseClass类型的引用变量,但没有指向任何实例,其值为null
myBaseObj = myObj;//将myBaseObj指向myObj引用的实例,即上面new MyDerivedClass()构造出来的实例。
MyBaseObj.DoSometing(); // 对,调用了实例“new MyDerivedClass()”的DoSomething方法。