C#基础概念学习

继承
类1:类2 类1中继承了类2中的元素

派生类和基类
类1是派生类, 类2是基类

方法的重写
基类中virtual,派生类中override,对基类成员进行覆盖

抽象类
不能被实例化,只能被继承,关键词abstract

一个类继承了抽象类,就必须实现抽象类中的所有的抽象方法。

抽象类:抽象类往往用来表征对问题领域复进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。抽象类是不完整的,它只能用作基类。

在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

class Program
    {
        static void Main(string[] args)
        {
            Man man = new Man();
            man.Eat();
            man.Say();
        }
    }
    public abstract class People
    {
        //注意:如果类中有抽象方法,则类必须声明为抽象类。
        public People()
        {
            Console.WriteLine("父类的构造函数");
        }
        public abstract void Eat();
        //有时候不想把类声明为抽象类,但又想实现方法在基类里不具体实现,
        //而是想实现方法由派生类重写。遇到这种情况时可使用virtual关键字将方法声明为虚方法
        public virtual void Say()
        {
            //注意虚方法必须声明方法主体,抽象方法则不需要
            Console.WriteLine("我是父类的虚方法");
        }
    }
    class Man:People
    {   
        public Man()
        {
            Console.WriteLine("子类构造函数");
        }
        public override void Eat()
        {
            Console.WriteLine("子类eat");
        }
        public override void Say()
        {
            Console.WriteLine("子类Say");
        }
    }

私有构造函数
用于阻止创建类的实例,没其他鸟用

public class Counter
{
    private Counter() { }
    public static int currentCount;
    public static int IncrementCount()
    {
        return ++currentCount;
    }
}

class TestCounter
{
    static void Main()
    {
        // If you uncomment the following statement, it will generate
        // an error because the constructor is inaccessible:
        // Counter aCounter = new Counter();   // Error

        Counter.currentCount = 100;
        Counter.IncrementCount();
        Console.WriteLine("New count: {0}", Counter.currentCount);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: New count: 101

Protect关键字
protected类型成员能够被派生类所继承
并且只能够通过派生类类型访问,而不能通过基类访问

属性
保护字段,对字段取值与赋值进行限定

        private string name;
        public string Name
        {
            get { return name; }
            set
            {
             name = String.IsNullOrEmpty(value) ? "空" : value;
            }
        }

成员
C#中,类的成员有两个分类:
1).数据成员:常量、字段(静态字段,实例字段)
2).函数成员:属性、方法、嵌套类、索引答器、事件、运算符、实例构造函数、析构函数、静态构造函数

static关键字
静态成员函数与类相联系,不与类的对象相联系

    class Program
    {
        public static int i = 0;
        public Program()
        {
            i = 1;
            Console.WriteLine("实例构造方法被调用");
        }
        static Program()
        {
            i = 2;
            Console.WriteLine("静态构造函数被执行");
        }
        static void Main(string[] args)
        {
            Console.WriteLine(i);//结果为2,首先,类被加载,所有的静态成员被创建在静态存储区,i=0,接着调用了类的成员,这时候静态构造函数就会被调用,i=2
            Program p = new Program();
            Console.WriteLine(i);//结果为1,实力化后,调用了实例构造函数,i=1,因为静态构造函数只执行一次,所以不会再执行。
            Console.ReadKey();
        }
    }

可变参数

可以在方法参数栏加params属性 接受一个一维数组的可变参数

public void test1(params string[] list) 
{
	for (int i = 0; i < list.Length; i++)
		Console.WriteLine(list[i])
}

引用传递
调用方法时,在方法中对参数所做的任何更改都反应在该变量中。

使用ref参数 必须方法声明 和调用方都必须显示的使用 ref关键字

int i = 3;
Console.WriteLine(i);
g.test2(ref i);
Console.WriteLine(i);
public void test2(ref int i) 
{i = 55;}

参数通过引用来传递。ref要求变量必须在传递前初始化。而out参数不用初始化。必须声明和调用方都显示使用 out

int value;
g.test3(out value);
public void test3(out int i) 
{i = 66;}

接口与抽象类的区别
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。但接口是一个行为的规范,里面的所有东西都是抽象的!一个类只可以继承一个基类也就是父类,但可以实现多个接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值