C#相关 与D.S.实现!

C# 中没有全局变量或全局函数,取而代之的是通过静态函数和静态变量完成的。 和 C++ 要求用户显示创建 delete 运算符不一样,它们使用新运算符创建,且没有 delete 运算符。 在 C# 中它们自动由垃圾回收系统回收。

C# 提供了一种更加便捷、简单而又直接的属性访问方式。

所以上面的类应该写成这样:

代码:

using System;

class Date

{

public int Day{

get {

return day;

}

set {

day = value;

}

}

int day;

public int Month{

get {

return month;

}

set {

month = value;

}

}

int month;

public int Year{

get {

return year;

}

set {

year = value;

}

}

int year;

public bool IsLeapYear(int year)

{

return year%4== 0 ? true: false;

}

public void SetDate (int day, int month, int year)

{

this.day = day;

this.month = month;

this.year = year;

}

}

这里是你 get 和 set 属性的方法:

代码:

class User

{

public static void Main()

{

Date date = new Date();

date.Day = 27;

date.Month = 6;

date.Year = 2003;

Console.WriteLine

(“Date: {0}/{1}/{2}”, date.Day, date.Month, date.Year);

}

}

修饰符

你必须知道 C++ 中常用的 public、private 和 protected 修饰符。

我将在这里讨论一些 C# 引入的新的修饰符。

readonly

readonly 修饰符仅用于修饰类的数据成员。

正如其名

字说的,一旦它们已经进行了写操作、直接初始化或在构造函数中对其进行了赋值,

readonly 数据成员就只能对其进行读取。

readonly 和 const 数据成员不同之处在于 const 要求你在声明时进行直接初始化。

看下面的例程:

代码:

class MyClass

{

const int constInt = 100; //直接进行

readonly int myInt = 5; //直接进行

readonly int myInt2;

public MyClass()

{

myInt2 = 8; //间接进行

}

public Func()

{

myInt = 7; //非法

Console.WriteLine(myInt2.ToString());

}

}

sealed

带有 sealed 修饰符的类不允许你从它继承任何类。所以如果你不想一个类被继承,

你可以对该类使用 sealed 关键字。

代码:

sealed class CanNotbeTheParent

{

int a = 5;

}

unsafe

你可以使用 unsafe 修饰符在 C# 中定义一个不安全上下文。

在不安全上下文中,你可以插入不安全代码,如 C++ 的指针等。参见以下代码:

代码:

public unsafe MyFunction( int pInt, double pDouble)

{

int* pAnotherInt = new int;

*pAnotherInt = 10;

pInt = pAnotherInt;

*pDouble = 8.9;

}

接口

如果你有 COM 的思想,你马上就知道我在说什么了。接口是只包含函数签名而在子类中实现的抽象基类。

在 C# 中,你可以用 interface 关键字声明这样的接口类。

.NET 就是基于这样的接口的。

C# 中你不能对类进行多重继承——这在 C++ 中是允许的。

通过接口,多重继承的精髓得以实现。即你的子类可以实现多重接口。(译注:由此可以实现多重继承)

代码:

using System;

interface myDrawing

{

int originx

{

get;

set;

}

int originy

{

get;

set;

}

void Draw(object shape);

}

class Shape: myDrawing

{

int OriX;

int OriY;

public int originx

{

get{

return OriX;

}

set{

OriX = value;

}

}

public int originy

{

get{

return OriY;

}

set{

OriY = value;

}

}

public void Draw(object shape)

{

… // 做要做的事

}

// 类自身的方法

public void MoveShape(int newX, int newY)

{

…..

}

}

(类似于引用的传递方法)http://www.cnblogs.com/gsk99/archive/2010/12/13/1904557.html

拆箱和装箱:int i=1 //声明一个值类型的变量 object o=i; //装箱,在堆上开辟一块内存,复制i的值到此内存块,公布一个地址,o引用它,o则为已装箱值类型(引用类型),会发生内存复制的操作。 int b=(int)o; //拆箱,通过o查找到托管堆上的内存快,提领这个内存快中值的地址,然后然后给b赋值,,事实上在给b赋值这一步不能算拆箱的一步,所以拆箱比装箱廉价得多

待于解决:

组在 C# 中比 C++ 中要高级很多。数组分配于堆中,所以是引用类型的。

(っ•̀ω•́)っ✎⁾⁾ 坚持技术学习、内容输出与分享,您的支持将鼓励我继续创作!(*/ω\*)
( • ̀ω•́ )✧如有疑问或需要技术讨论,请留言或发邮件到 aclearzhang@qq.com.(*・ω< ) 
  • 本文作者:: AClearZhang
  • 本文链接:: 412.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!