博文
探讨一下静态构造函数(二)(C#版)(2007-10-14 23:10:00)
摘要:因为前面的一篇的文章已介绍了静态构造函数的一些特性,这篇文章着重介绍静态构造函数的一些用法:
代码如下:
//代码段一
using System;
class MyClass
{
public static int x;
public static int y;
static MyClass ()
{
x = 100;
y = 200;
}
static void Main()
{
Console.WriteLine("{0},{1}",MyClass.x,MyClass.y);//在C#中静态成员属于类的成员,不//需要实例化对象来调用。
}
}
运行结果:100,200
//代码段二
class Test
{
private static int id = 5;
public static int Id
{
get
{
return id;
}
}
&n......
探讨一下静态构造函数(一)(C#版)(2007-10-13 14:34:00)
摘要:静态构造函数是C#的一个新的特性。这里的"新"有别于C++。这是一个特殊的构造函数,它在创建类的第一个对象(实例)之前被调用。执行时间不能确定,但它肯定是创建实例之前。可能当时加载程序集。
下面看一下静态构造函数的代码语法:
public class myClass
{
static myClass()
{
}
}
构造函数的一些提示:
1)在一个类里面只有唯一的一个静态构造函数,即静态构造函数不能重载。
代码如下:
//这是允许的 ,因为它们在执行时间上面是完全不同的。
public class myClass
{
static myClass()
{
}
public myClass()
{
}
}
2)静态构造函数应该没有参数。这是因为静态构造函数由CLR来调用的,没有用户可以传递参数给它。
3)静态构造函数只可以存取类的静态成员。这是因为在类的实例成员具体到对象实例,因此静态函数如果允许运行实例成员,将会反应到所有对象实例的变化,这是不切实际的。
4)在静态函数的定义中不应该获得修改。这是因为静态函数的调用是由CLR来控制的,而不是对象。因此你不需要也无必要去修改。......
探讨一下构造函数中base和this的用法与区别(C#版)(2007-10-12 21:45:00)
摘要:这篇文章主要介绍一下在构造函数中base和this的用法和区别的。接下来的文章会陆续介绍一下静态变量和静态构造函数。希望大家能够将意见反馈给我。
代码最具有说服性了,看下面代码吧:
//代码段一
public class ConstructorProgram1
{
private string name;
public ConstructorProgram1()
{
Console.WriteLine("No Info Left");
}
public ConstructorProgram1(string name)
{
this.name = name;
Console.WriteLine("name=" + this.name);
}
}
这里我重载了另外一个构造函数,里面的this作为一个指针指示了一个类的引用。即是ConstructorProgram1类的引用。这个很简单,但不是重点。
这篇文章最重点要说一下:this和base在构造函数中扮演的角色。
看下面的代码:
public class ConstructorProgram
{
&......
学习C#引用参数的体会(2007-02-12 01:10:00)
摘要:下面我总结下我对out和ref引用参数的看法:
1.out和ref引用参数的相同点:都是通过引用传递参数给函数;
2.out和ref引用参数的不同点是:用ref引用传递参数,该参数必须经过初始化,并且不能在调用它的函数中初始化,以下例子是错误的:
namespace refConsoleApp
{
class MyRefClass
......
学习C#委托用法的体会(2007-02-12 01:08:00)
摘要:委托是一种可以把引用封装成命名或者匿名函数的类型.委托的声明制定了一个函数签名,其中包含一个返回类型和参数列表.示例:delegate void SampleDelegate(string message).这里声明要用到关键字delegate.接着声明该委托类型的变量,初始化这个变量为与委托有相同签名的函数引用.最后可以使用委托变量调用这个函数.
下面来说一下与委托有关联的命名函数与匿名函数:当你用一个命名方法来实例化一个委托的时候,该方法会作为一个参数来传递,示例:
//声明一个委托
delegate void Del(int x);
//定义一个命名函数
void DoWork(int k)
{ /* */}
//使用该命名方法作为参数来实例化委托
Del d=obj.DoWork;
以下给出完整的示例:
//声明一个委托
delegate void Del(int i,double j);
class MathClass
{
//声明相同签名的函数
void MultiplyNumbers(int m,double n)
......