乐趣区

走进c#

本周项目逐渐完工,没有发现什么重大问题,所以一直在写.net 的实验,.net 框架大部分使用的是以 c#编写的,上课的时候也仔细听了一下,也算对 c#有些了解,之前先学的 java,对比 java,感觉 c# 有其他的特性 (也可能 java 也有,只是我不熟悉),在这里总结一下 (本文只是个人的理解, 如有错误,希望能指出并原谅, 仅是初学).
1. 属性和字段
之前我一直以为属性和字段是同一个意思,但其实不是这样的, 字段通常是在类中定义的类成员变量,而属性是对字段的封装,供外部访问。这在 java 中就是像 getXX(),setXX() 的方法一样. 例如:
//java 中
class Person {
Stringname;// 字段 (类成员)

public void setName(String name) {//name 的写属性
this.name = name;
}

public String getName() { //name 的读属性
return this.name;
}
}
c# 的属性写法类似 type.js 的:
class Person{
string name;

public string Name{
get{
return name;
}
set{
name = value;
}
}
}
这里属性的定义就是: [修饰符] 类型说明符 Name, 就是上面第三行, 此时 name 就是字段,Name 就是属性了, 这个属性是公有的可直接获取,但是获取和赋值都在我们的控制中, 也可以去掉 get 或 set 将字段设置为只可读或只可设置.
2. 多态
在 c# 中, 实现多态重写父类方法是,只能重写虚方法, 需要使用到关键词 virtual. 例如:
class Program
{
static void Main(string[] args)
{
Father father = new Child();
father.sayName();
}
}

class Father
{
public void sayName()
{
Console.WriteLine(“fathler”);
}
}

class Child : Father
{
public void sayName()
{
Console.WriteLine(“child”);
}
}
定义一个父类和子类,在入口函数 Main 中新建一个子类赋值给父类,根据多态的含义,在 java 中肯定直接输出 child 了, 但是 c# 中却直接输出了 father: 原因就是因为要覆盖父类中的方法,父类方法必须要用 virtual 修饰,子类方法要用 override 修饰, 而 java 中默认所有的方法都是虚方法, 所以 java 就直接输出 child 的.
class Program
{
static void Main(string[] args)
{
Father father = new Child();
father.sayName();
}
}

class Father
{
public virtual void sayName()
{
Console.WriteLine(“fathler”);
}
}

class Child : Father
{
public override void sayName()
{
Console.WriteLine(“child”);
}
}
这么想来之前 c ++ 也见过 virtual 这个关键字, 解决了多继承的问题, 但是当时没看明白,果然还是用过才能理解。
3. 结构体
结构体与类类似,就是类是放在堆中的,结构体放在栈中,优点就是创建快,缺点就是不能全局引用。// 写法与类类似,就是将 class 改为 struct 也可继承 实现接口 public struct {
string title;
public string gettitle() {
return title;
}
}
总结
我感觉 c# 就像是 c ++ 的改进版, 更加的面向对象,同时还吸取了 java,js 等其他语言的特点融合起来的, 感觉就是现在的各种语言都有很多相似的地方,大家互相借鉴学习并融合,变得越来越强大了,同时学好一门语言学其他的压力也就没这么大了,不像刚开始的学 c 语言那么费劲了.

退出移动版