学习C#(一)

赶紧好好学学自己的C#,,要不然要给做的东西说拜拜了,,,时间紧迫,,,真担心会食言.....................

在C#中以为只要类有构造方法,,,,原来结构也有

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 结构
{
    class Program
    {
        public struct Rect
        {
            public double width;
            public double hight;
            public Rect(double x,double y)//构造方法
            {
                width = x;
                hight = y;
            }
            public double Area()
            {
                return width * hight;
            }
        }
        static void Main(string[] args)
        {
            Rect rect;
            rect.width = 5;
            rect.hight = 6;
            Console.WriteLine(rect.Area());

            Rect re = new Rect(2,3);//使用结构的构造方法
            Console.WriteLine(re.Area());

            Console.ReadKey();
        }
    }
}

get set

假如说定义一个变量,A,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace getset
{
    class Program
    {
        public class class1
        {
            int A;
            
            public static void Main()
            {
                class1 cla = new class1();
                cla.A = 10;

                Console.WriteLine(cla.A);

                Console.ReadKey();
            }

        }
    }
}

现在这个变量需要做一下限制,,,对其赋值时不能大于65536,,怎么在赋值的时候判断这个变量是不是大于了65536,如果大于了给点提示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace getset
{
    class Program
    {
        public class class1
        {
            int a;
            public int A
            {
                get
                {
                    return a;
                }
                set
                {
                    if (value >= 65536)
                    {
                        Console.WriteLine("This value greater than the 65536");
                    }
                    else
                    { 
                        a = value;
                    }
                }
            }
            public static void Main()
            {
                class1 cla = new class1();
                cla.A = 666666;
                Console.WriteLine(cla.A);
                Console.ReadKey();
            }
        }
    }
}

多个CS文件

命名空间不一样的

 关于继承----继承者和被继承者里面的东西一样

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Inherit
    {
        public int val = 0;

        public void print()
        {
            Console.WriteLine(val);
        }
    }
    class Inherit_1 : Inherit
    {
        public int val = 3;

        public void print()
        {
            Console.WriteLine(val);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Inherit inher = new Inherit();
            inher.print();

            Inherit_1 inher_1 = new Inherit_1();
            inher_1.print();

            Console.ReadKey();
        }
        
    }
}

会有一个提示

 

当派生类从基类继承时,它会获得基类的所有方法、字段、属性和事件。若要更改基类的数据和行为,您有两种选择:可以使用新的派生成员替换基成员,或者可以重写虚拟的基成员。

上面的基类(父类)没有虚方法,,,,,所以可以选择第一种,,,,,使用新的派生成员替换基类成员

使用新的派生成员替换基类的成员需要使用 new 关键字。如果基类定义了一个方法、字段或属性,则 new 关键字用于在派生类中创建该方法、字段或属性的新定义。new 关键字放置在要替换的类成员的返回类型之前

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Inherit
    {
        public int val = 0;

        public void print()
        {
            Console.WriteLine(val);
        }
    }
    class Inherit_1 : Inherit
    {
        public new int val = 3;//只是多加了一个new

        public new void print()
        {
            Console.WriteLine(val);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Inherit inher = new Inherit();
            inher.print();

            Inherit_1 inher_1 = new Inherit_1();
            inher_1.print();

            Console.ReadKey();
        }
        
    }
}

其实结果一样,

一句话,如果子类继承了父类,子类和父类中有一个相同的方法,,,子类调用这个方法时默认先在子类中找,,,如果子类没有才会在父类中找

其实也可以这样写

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Inherit
    {
        public int val = 0;

        public void print()
        {
            Console.WriteLine(val);
        }
    }
    class Inherit_1 : Inherit
    {
        public int val = 3;

        public void print()
        {
            Console.WriteLine(val);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Inherit_1 inher_1 = new Inherit_1();//子类
            inher_1.print();

            Inherit inher = (Inherit)inher_1;//父类--强制转换
            inher.print();

            Console.ReadKey();
        }
        
    }
}
Inherit_1 inher_1 = new Inherit_1();//子类
inher_1.print();//调用的是子类的方法

Inherit inher = (Inherit)inher_1;//父类--将派生类的实例强制转换为基类的实例--然后赋值
inher.print();//调用的是父类的方法

为了使派生类的实例完全接替来自基类的类成员,基类必须将该成员声明为虚拟的。这是通过在该成员的返回类型之前添加 virtual 关键字来实现的。然后,派生类可以选择使用override 关键字而不是 new,将基类实现替换为它自己的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Inherit
    {
        public virtual void print()//父类中用virtual关键字说明这个方法是一个虚方法
        {
            Console.WriteLine("123");
        }
    }
    class Inherit_1 : Inherit
    {
        public override void print()//重写父类的虚方法
        {
            Console.WriteLine("456");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Inherit inher1 =new Inherit();//直接新建父类对象
            inher1.print();//调用父类方法

            Inherit_1 inher_1 = new Inherit_1();//新建子类对象
            inher_1.print();//调用子类方法

            Inherit inher = (Inherit)inher_1;//强制转换为父类.....还是不行的
            inher.print();//还是调用子类方法

            Console.ReadKey();
        }
    }
}

主要看打印

如果要停止这个虚拟方法,,,

 

让这个方法不是虚的了,,要用 sealed 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class A
    {
        public virtual void print()//父类中用virtual关键字说明这个方法是一个虚方法
        {
            Console.WriteLine("123");
        }
    }
    class B : A
    {
        public override void print()//重写父类的虚方法
        {
            Console.WriteLine("456");
        }
    }
    class C : B
    {
        public override void print()//重写父类的虚方法
        {
            base.print();//已替换或重写某个方法或属性的派生类仍然可以使用基关键字访问基类的该方法或属性
            //Console.WriteLine("789");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            C c = new C();
            c.print();

            Console.ReadKey();
        }
    }
}

洗澡,吃饭....................

posted on 2017-02-24 18:00  广源时代  阅读(1333)  评论(0编辑  收藏  举报

导航

支付宝 QQ群