C#基础篇之二 常用的一些基础知识

一般情况,方法的参数传递是通过值进行传递的,即一个对象作为参数传递给方法使用,该对象便进驻到该参数对象所在指针的内存空间(使用C来描述),也就是该对象在此位置创建了副本,当方法运行结束时,该副本将会被销毁;这种传递方式的使用占据了日常方法传参的绝大多数。

另一种情况是引用传递,它与值传递方式不同,对象传递给方法时对方法参数并没有影响,仍然返回的是受原始参数取值影响的方法,即MethodInstance(ref _refValue)调用 Method(ref _arg)方法,但_refValue对Method无影响,返回的仍是_arg影响的结果。这点也能想到_arg必须在使用前赋值。

之前提到ref是将原方法中的参数影响的结果返回到调用它的方法中,out与ref类似,相比之下,ref传递参数的地址,out是返回值。传值(by value)与传址(by reference)分别为普通传递参数方式与ref声明方式,传址方式在使用前需要ref关键词修饰;out为输出返回传递,与ref相同之处较多,其重要区别是在上一节讲到的ref在被引用方法中必须被初始化;out在被引用方法中一定要有返回值。

/******************************
* Description:数组参数params的使用
* ***************************/
namespace TestParams
{
class Program
{
public static class ParamsClass
{
/// <summary>
/// 两个参数,最后一个参数为数组参数
/// </summary>
/// <param name="num"></param>
/// <param name="args"></param>
public static void ParamsMethod(int num,params string[] args)
{
foreach (string _args in args)
{
Console.WriteLine(_args);
}
Console.WriteLine("Total Num is " + num);
Console.ReadKey();
}
}
static void Main(string[] args)
{
string[] strArr ={"Wang Hongjian","ChenChen","Dodo" };
int personNum = strArr.Length;
ParamsClass.ParamsMethod(personNum, strArr);
}
}
}

类的访问类型

因此从访问级别由高到低应当是Public>protected internal>internal>Protected>Private

类的默认修饰符为internal ,类中的成员变量默认修饰符为private,namespace可认为修饰符为public。另一点在msdn上也提到继承类的访问级别不能大于被继承类的访问级别,如internal的类不能继承private的类。

is与as

C#中允许数据在继承链中向下转型,在转换前需要判断数据的类型,可以使用is来判断基础类型。可以这样来理解:若该对象可以非空,且可以强制转换为所提供的类型而不引发异常,则is表达式返回true。使用语法为:

if(obj?is?objType)
{

}

as

在之前一节的类型转换提到了各种类型转换,还有一种转换方式使用as运算符进行转换,as将对象转换为一个特定的数据类型。若转换失败,as运算符会将null值赋给目标,这样就避免了可能因为转型而造成的异常。在msdn有as 的一个经典示例。

 

class MainClass

{

 static void Main()

 {

 object[] objArray = new object[6];

 objArray[0] = new Class1();

objArray[1] = new Class2();

objArray[2] = "hello";

objArray[3] = 123;

objArray[4] = 123.4;

objArray[5] = null;

 for (int i = 0; i < objArray.Length; ++i)

 {

 string s = objArray[i] as string;

 Console.Write("{0}:", i);

 if (s != null)

 {

 Console.WriteLine("'" + s + "'");

}

 else

 {

Console.WriteLine("not a string");

}

}

 

posted @ 2015-04-14 09:49  半夏浮生  阅读(100)  评论(0)    收藏  举报