首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于使用字段、方法和属性的有关问题

2013-08-13 
关于使用字段、方法和属性的问题//先定义一个类public class MyClass{public readonly string Nameprivate

关于使用字段、方法和属性的问题


//先定义一个类
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坏掉了?

热点排行