C#入门问题解决(一)


1.静态变量和非静态变量的区别?

答:

静态变量:静态变量使用 static 修饰符进行声明,在所属类被装载时创建,通过类进行访问,所属类的所有实例的同一静态变量都是同一个值

非静态变量:不带有 static 修饰符声明的变量称做非静态变量,在类被实例化时创建,通过对象进行访问,同一个类的不同实例的同一非静态变量可以是不同的值

示例:

None.gif
None.gif
using System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif  
None.gif
namespace Example01 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
class Program 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
class Class1 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
public static String staticStr = "Class"
InBlock.gif            
public String notstaticStr = "Obj"
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
static void Main(string[] args) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
//静态变量通过类进行访问,该类所有实例的同一静态变量都是同一个值 
InBlock.gif
            Console.WriteLine("Class1's staticStr: {0}", Class1.staticStr); 
InBlock.gif  
InBlock.gif            Class1 tmpObj1 
= new Class1(); 
InBlock.gif            tmpObj1.notstaticStr 
= "tmpObj1"
InBlock.gif            Class1 tmpObj2 
= new Class1(); 
InBlock.gif            tmpObj2.notstaticStr 
= "tmpObj2"
InBlock.gif  
InBlock.gif            
//非静态变量通过对象进行访问,不同对象的同一非静态变量可以有不同的值 
InBlock.gif
            Console.WriteLine("tmpObj1's notstaticStr: {0}", tmpObj1.notstaticStr); 
InBlock.gif            Console.WriteLine(
"tmpObj2's notstaticStr: {0}", tmpObj2.notstaticStr); 
InBlock.gif  
InBlock.gif            Console.ReadLine(); 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif


结果:
Class1's staticStr: Class
tmpObj1's notstaticStr: tmpObj1
tmpObj2's notstaticStr: tmpObj2


2.const 和 static readonly 区别?

答:

const :用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序

static readonly:用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化

示例:

None.gif测试类: 
None.gif
None.gif
using System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif  
None.gif
namespace Example02Lib 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
public class Class1 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
public const String strConst = "Const"
InBlock.gif        
public static readonly String strStaticReadonly = "StaticReadonly"
InBlock.gif        
//public const String strConst = "Const Changed"; 
InBlock.gif        
//public static readonly String strStaticReadonly = "StaticReadonly Changed"; 
ExpandedSubBlockEnd.gif
    }
 
ExpandedBlockEnd.gif}
 
None.gif  
None.gif客户端代码: 
None.gif
None.gif
using System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif
using Example02Lib; 
None.gif  
None.gif
namespace Example02 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
class Program 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
static void Main(string[] args) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
//修改Example02中Class1的strConst初始值后,只编译Example02Lib项目 
InBlock.gif            
//然后到资源管理器里把新编译的Example02Lib.dll拷贝Example02.exe所在的目录,执行Example02.exe 
InBlock.gif            
//切不可在IDE里直接调试运行因为这会重新编译整个解决方案!! 
InBlock.gif  
InBlock.gif            
//可以看到strConst的输出没有改变,而strStaticReadonly的输出已经改变 
InBlock.gif            
//表明Const变量是在编译期初始化并嵌入到客户端程序,而StaticReadonly是在运行时初始化的 
InBlock.gif
            Console.WriteLine("strConst : {0}", Class1.strConst); 
InBlock.gif            Console.WriteLine(
"strStaticReadonly : {0}", Class1.strStaticReadonly); 
InBlock.gif  
InBlock.gif            Console.ReadLine(); 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif



结果:
strConst : Const
strStaticReadonly : StaticReadonly 

修改后的示例:

None.gif测试类: 
None.gif
None.gif
using System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif  
None.gif
namespace Example02Lib 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
public class Class1 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
//public const String strConst = "Const"; 
InBlock.gif        
//public static readonly String strStaticReadonly = "StaticReadonly"; 
InBlock.gif
        public const String strConst = "Const Changed"
InBlock.gif        
public static readonly String strStaticReadonly = "StaticReadonly Changed"
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif


结果

strConst : Const
strStaticReadonly : StaticReadonly Changed


3.extern 是什么意思?

答:extern 修饰符用于声明由程序集外部实现的成员函数,经常用于系统API函数的调用(通过 DllImport )。注意,和DllImport一起使用时要加上 static 修饰符,也可以用于对于同一程序集不同版本组件的调用(用 extern 声明别名),不能与 abstract 修饰符同时使用

示例:

None.gifusing System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif
using System.Runtime.InteropServices; 
None.gif  
None.gif
namespace Example03 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
class Program 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
//注意DllImport是一个Attribute Property,在System.Runtime.InteropServices命名空间中定义 
InBlock.gif        
//extern与DllImport一起使用时必须再加上一个static修饰符 
InBlock.gif
        [DllImport("User32.dll")] 
InBlock.gif        
public static extern int MessageBox(int Handle, string Message, string Caption, int Type); 
InBlock.gif  
InBlock.gif        
static int Main() 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
string myString; 
InBlock.gif            Console.Write(
"Enter your message: "); 
InBlock.gif            myString 
= Console.ReadLine(); 
InBlock.gif            
return MessageBox(0, myString, "My Message Box"0); 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif


结果:
 


4.abstract 是什么意思?

答:abstract 修饰符可以用于类、方法、属性、事件和索引指示器(indexer),表示其为抽象成员,abstract 不可以和 static 、virtual 、override 一起使用,声明为 abstract 成员可以不包括实现代码,但只有类中还有未实现的抽象成员,该类就不可以被实例化,通常用于强制继承类必须实现某一成员

示例:

None.gifusing System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif  
None.gif
namespace Example04 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif    
基类,抽象类#region 基类,抽象类 
InBlock.gif    
public abstract class BaseClass 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
//抽象属性,同时具有get和set访问器表示继承类必须将该属性实现为可读写 
InBlock.gif
        public abstract String Attribute 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
get
InBlock.gif            
set
ExpandedSubBlockEnd.gif        }
 
InBlock.gif  
InBlock.gif        
//抽象方法,传入一个字符串参数无返回值 
InBlock.gif
        public abstract void Function(String value); 
InBlock.gif  
InBlock.gif        
//抽象事件,类型为系统预定义的代理(delegate):EventHandler 
InBlock.gif
        public abstract event EventHandler Event; 
InBlock.gif  
InBlock.gif        
//抽象索引指示器,只具有get访问器表示继承类必须将该索引指示器实现为只读 
InBlock.gif
        public abstract Char this[int Index] 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
get
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedSubBlockEnd.gif    
#endregion
 
InBlock.gif  
ContractedSubBlock.gifExpandedSubBlockStart.gif    
继承类#region 继承类 
InBlock.gif    
public class DeriveClass : BaseClass 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
private String attribute; 
InBlock.gif  
InBlock.gif        
public override String Attribute 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
get 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                
return attribute; 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif            
set 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                attribute 
= value; 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
public override void Function(String value) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            attribute 
= value; 
InBlock.gif            
if (Event != null
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Event(
thisnew EventArgs()); 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
public override event EventHandler Event; 
InBlock.gif        
public override Char this[int Index] 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
get 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                
return attribute[Index]; 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedSubBlockEnd.gif    
#endregion
 
InBlock.gif  
InBlock.gif    
class Program 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
static void OnFunction(object sender, EventArgs e) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
for (int i = 0; i < ((DeriveClass)sender).Attribute.Length; i++
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(((DeriveClass)sender)[i]); 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
static void Main(string[] args) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            DeriveClass tmpObj 
= new DeriveClass(); 
InBlock.gif  
InBlock.gif            tmpObj.Attribute 
= "1234567"
InBlock.gif            Console.WriteLine(tmpObj.Attribute); 
InBlock.gif  
InBlock.gif            
//将静态函数OnFunction与tmpObj对象的Event事件进行关联 
InBlock.gif
            tmpObj.Event += new EventHandler(OnFunction); 
InBlock.gif  
InBlock.gif            tmpObj.Function(
"7654321"); 
InBlock.gif  
InBlock.gif            Console.ReadLine(); 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif


结果:
1234567
7
6
5
4
3
2



5.internal 修饰符起什么作用?

答:internal 修饰符可以用于类型或成员,使用该修饰符声明的类型或成员只能在同一程集内访问,接口的成员不能使用 internal 修饰符

示例

None.gifExample05Lib 项目的 Class1 
None.gif
None.gif
using System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif  
None.gif
namespace Example05Lib 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
public class Class1 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
internal String strInternal = null
InBlock.gif        
public String strPublic; 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif


结果
Example05Lib 项目的 Class2 类可以访问到 Class1 的 strInternal 成员

 

Example05 项目的 Program 类无法访问到 Class1 的 strInternal 成员

 


6.sealed 修饰符是干什么的?

答:sealed 修饰符表示密封,用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义上互相排斥,用于方法和属性时,表示该方法或属性不能再被继承,必须和 override 关键字一起使用,因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员,通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱,恰当的利用 sealed 修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员

示例:

None.gifusing System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif  
None.gif
namespace Example06 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
class Program 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
class A 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
public virtual void F() 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(
"A.F"); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif            
public virtual void G() 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(
"A.G"); 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
class B : A 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
public sealed override void F() 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(
"B.F"); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif            
public override void G() 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(
"B.G"); 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
class C : B 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
public override void G() 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(
"C.G"); 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
static void Main(string[] args) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
new A().F(); 
InBlock.gif            
new A().G(); 
InBlock.gif            
new B().F(); 
InBlock.gif            
new B().G(); 
InBlock.gif            
new C().F(); 
InBlock.gif            
new C().G(); 
InBlock.gif  
InBlock.gif            Console.ReadLine(); 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif


结果:
类 B 在继承类 A 时可以重写两个虚函数,如图所示:

 

由于类 B 中对 F 方法进行了密封, 类 C 在继承类 B 时只能重写一个函数,如图所示:

 

控制台输出结果,类 C 的方法 F 只能是输出 类B 中对该方法的实现:

A.F
A.G
B.F
B.G
B.F
C.G 


7.override 和 overload 的区别?

答:
override 表示重写,用于继承类对基类中虚成员的实现

overload 表示重载,用于同一个类中同名方法不同参数(包括类型不同或个数不同)的实现

示例:

None.gifusing System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif  
None.gif
namespace Example07 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
class Program 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
class BaseClass 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
public virtual void F() 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(
"BaseClass.F"); 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
class DeriveClass : BaseClass 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
public override void F() 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                
base.F(); 
InBlock.gif                Console.WriteLine(
"DeriveClass.F"); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif            
public void Add(int Left, int Right) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(
"Add for Int: {0}", Left + Right); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif            
public void Add(double Left, double Right) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(
"Add for int: {0}", Left + Right); 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
static void Main(string[] args) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            DeriveClass tmpObj 
= new DeriveClass(); 
InBlock.gif            tmpObj.F(); 
InBlock.gif            tmpObj.Add(
12); 
InBlock.gif            tmpObj.Add(
1.12.2); 
InBlock.gif  
InBlock.gif            Console.ReadLine(); 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif


结果:
BaseClass.F
DeriveClass.F
Add for Int: 3
Add for int: 3.3 


8.什么是索引指示器?

答:

实现索引指示器(indexer)的类可以象数组那样使用其实例后的对象,但与数组不同的是索引指示器的参数类型不仅限于int

简单来说,其本质就是一个含参数属性

示例: 

None.gifusing System; 
None.gif
using System.Collections.Generic; 
None.gif
using System.Text; 
None.gif  
None.gif
namespace Example08 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif    
public class Point 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
private double x, y; 
InBlock.gif        
public Point(double X, double Y) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            x 
= X; 
InBlock.gif            y 
= Y; 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
//重写ToString方法方便输出 
InBlock.gif
        public override string ToString() 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
return String.Format("X: {0} , Y: {1}", x, y); 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
InBlock.gif    
public class Points 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        Point[] points; 
InBlock.gif        
public Points(Point[] Points) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            points 
= Points; 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
public int PointNumber 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
get  
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{  
InBlock.gif                
return points.Length;  
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
     
InBlock.gif        
//实现索引访问器 
InBlock.gif
        public Point this[int Index] 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
get 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                
return points[Index]; 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
InBlock.gif  
InBlock.gif    
//感谢watson hua(http://huazhihao.cnblogs.com/)的指点 
InBlock.gif    
//索引指示器的实质是含参属性,参数并不只限于int 
InBlock.gif
    class WeatherOfWeek 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
public string this[int Index] 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
get 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                
//注意case段使用return直接返回所以不需要break 
InBlock.gif
                switch (Index) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif
InBlock.gif                    
case 0
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif
InBlock.gif                            
return "Today is cloudy!"
ExpandedSubBlockEnd.gif                        }
 
InBlock.gif                    
case 5
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif
InBlock.gif                            
return "Today is thundershower!"
ExpandedSubBlockEnd.gif                        }
 
InBlock.gif                    
default
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif
InBlock.gif                            
return "Today is fine!"
ExpandedSubBlockEnd.gif                        }
 
ExpandedSubBlockEnd.gif                }
 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
InBlock.gif        
public string this[string Day] 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            
get 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                
string TodayWeather = null
InBlock.gif                
//switch的标准写法 
InBlock.gif
                switch (Day) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif
InBlock.gif                    
case "Sunday"
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif
InBlock.gif                            TodayWeather 
= "Today is cloudy!"
InBlock.gif                            
break
ExpandedSubBlockEnd.gif                        }
 
InBlock.gif                    
case "Friday"
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif
InBlock.gif                            TodayWeather 
= "Today is thundershower!"
InBlock.gif                            
break
ExpandedSubBlockEnd.gif                        }
 
InBlock.gif                    
default
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif
InBlock.gif                            TodayWeather 
= "Today is fine!"
InBlock.gif                            
break
ExpandedSubBlockEnd.gif                        }
 
ExpandedSubBlockEnd.gif                }
 
InBlock.gif                
return TodayWeather; 
ExpandedSubBlockEnd.gif            }
 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
InBlock.gif    
class Program 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif        
static void Main(string[] args) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif
InBlock.gif            Point[] tmpPoints 
= new Point[10]; 
InBlock.gif            
for (int i = 0; i < tmpPoints.Length; i++
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                tmpPoints[i] 
= new Point(i, Math.Sin(i)); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif  
InBlock.gif            Points tmpObj 
= new Points(tmpPoints); 
InBlock.gif            
for (int i = 0; i < tmpObj.PointNumber; i++
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(tmpObj[i]); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif  
InBlock.gif  
ExpandedSubBlockStart.gifContractedSubBlock.gif            
string[] Week = new string[] dot.gif"Sunday""Monday""Tuesday""Wednesday""Thursday""Friday""Staurday"}
InBlock.gif            WeatherOfWeek tmpWeatherOfWeek 
= new WeatherOfWeek(); 
InBlock.gif            
for (int i = 0; i < 6; i++
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(tmpWeatherOfWeek[i]); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif            
foreach (string tmpDay in Week) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
InBlock.gif                Console.WriteLine(tmpWeatherOfWeek[tmpDay]); 
ExpandedSubBlockEnd.gif            }
 
InBlock.gif  
InBlock.gif            Console.ReadLine(); 
ExpandedSubBlockEnd.gif        }
 
ExpandedSubBlockEnd.gif    }
 
ExpandedBlockEnd.gif}
 
None.gif



结果:
X: 0 , Y: 0
X: 1 , Y: 0.841470984807897
X: 2 , Y: 0.909297426825682
X: 3 , Y: 0.141120008059867
X: 4 , Y: -0.756802495307928
X: 5 , Y: -0.958924274663138
X: 6 , Y: -0.279415498198926
X: 7 , Y: 0.656986598718789
X: 8 , Y: 0.989358246623382
X: 9 , Y: 0.412118485241757
Today is cloudy!
Today is fine!
Today is fine!
Today is fine!
Today is fine!
Today is thundershower!
Today is cloudy!
Today is fine!
Today is fine!
Today is fine!
Today is fine!
Today is thundershower!
Today is fine! 

转载于:https://www.cnblogs.com/lynnwayne/archive/2007/06/08/777008.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值