c#结构体-多态复习(1)

原创 2016年08月28日 20:11:07
1.get访问器与方法体类似,它必须返回属性类型的值,而set访问器类似于放回类型为void的方法,它使用成为value的隐式参数,此参数的类型时属性的类型。

2.结构的特点:
结构是值类型向方法传递结构时,结构时通过值的方式传递的,而不是作为引用传递的。
结构的实例化可以不同new运算符结构可以声明构造函数,但他们必须带有参数
一个结构不能从另一个结构继承
结构可以实现接口
在结构中初始化实例字段是错误的


3.结构的使用和类的使用区别
using System;
class MyClass
{
    public int id;
    public mystr str;  //作为成员变量
}


public struct  mystr  //结构体
{
    public int id;
    public mystr(int idd=0)
    {
        id = idd;
    }
}
class Test
{
    public static void change(MyClass my1)
    {
        my1.id = 10;
    }
    public static void chan(mystr my2)
    {
        my2.id = 10;
    }
    public static void Main(string[] ags)
    {
        MyClass my = new MyClass();
        Console.WriteLine(my.id);
        change(my);  //这个是引用类型
        Console.WriteLine(my.id);


        //mystr str=new mystr(11);
        mystr str;  //定义结构体
        str.id = 0;  //注意因为是值类型,作为局部变量所以需要初始化才能使用
        Console.WriteLine(str.id);
        chan(str);   //结构体传递的是值
        Console.WriteLine(str.id);


        Console.WriteLine(my.str.id); //注意这个没有手动初始化
    }
}


4.c#中的多态
using System;
class A
{
    public  int a;
    public  int b;
    public virtual int Add()
    {
        return a+b;
    }
}
class B : A
{
    public override int Add()  //重写基类方法
    {
        Console.WriteLine(base.Add()); //调用基类方法
        int x = 5;
        int y = 7;
        return x + y;
    }
}
class C : A
{
    public override int Add()
    {
        int x = 4;
        int y = 7;
        return x + y;
    }
}
class D: A
{
    public override int Add()
    {
        Console.WriteLine(base.Add());//子类中调用基类方法
        int x = 3;
        int y = 7;
        return x + y;
    }
}
class Test
{
    public void show(A a)  //通过基类对象来调用子类方法(多态)
    {
        Console.WriteLine(a.Add());
    }
    public static void Main(string[] args)
    {
        B b = new B();   //创建对象
        C c = new C();
        D d = new D();
        Test t = new Test();
        t.show(b);
        t.show(c);
        t.show(d);
    }
}


5.c#中的抽象类
C#和C++一样,如果一个类派生于一个抽象类但是并没有为基类的所有抽象方法提供实现代码,那么这个派生类也被认为是一个抽象类。C#要求这种类型的类也必须在类的头部显示地使用abstract关键字进行声明。
using System;
abstract class A  //抽象类
{
    public  int a;
    public  int b;
    public abstract int Add();  //抽象方法
}
class B : A
{
    public override int Add()  //重写基类方法
    {
        
        int x = 5;
        int y = 7;
        return x + y;
    }
}


class Test
{
    public void show(A a)  //通过基类对象来调用子类方法(多态)
    {
        Console.WriteLine(a.Add());
    }
    public static void Main(string[] args)
    {
        B b = new B();
        Test t = new Test();
        t.show(b);
    }
}

C#学习之byte数组与结构体之间的转换

原文: http://www.cnblogs.com/sunrack/articles/1244043.html //**注意在我的实际项目中直接调用字节转换,并没有定义结构体 在写C#T...
  • ycigwy
  • ycigwy
  • 2017年04月21日 09:59
  • 340

C#结构体特性及与类的区别

  • 2012年09月10日 09:54
  • 3KB
  • 下载

C#中List保存的结构体

前些时间用C#的List保存一些结构体,结果出现问题:在把一个结构A加入到List中后,再修改A中的字段值,结果List中的所有项对应的字段也全都变化了!结构定义:public struct xtli...
  • jszj
  • jszj
  • 2017年06月16日 15:28
  • 716

C#中的结构体与类的区别

经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字st...

C#类最初步代码结构体创建

  • 2011年04月28日 21:28
  • 56KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#结构体-多态复习(1)
举报原因:
原因补充:

(最多只允许输入30个字)