学习C#(一)

简介: 赶紧好好学学自己的C#,,要不然要给做的东西说拜拜了,,,时间紧迫,,,真担心会食言.....................在C#中以为只要类有构造方法,,,,原来结构也有using System;using System.

赶紧好好学学自己的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();
        }
    }
}

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

目录
相关文章
|
6月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
6月前
|
C#
C#学习相关系列之yield和return的区别
C#学习相关系列之yield和return的区别
|
6月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
6月前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
6月前
|
存储 C#
C#学习系列相关之数组(一)---数组的定义与使用
C#学习系列相关之数组(一)---数组的定义与使用
|
6天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
1月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
6月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
75 0
|
2月前
|
Linux C# 开发者
Uno Platform 驱动的跨平台应用开发:从零开始的全方位资源指南与定制化学习路径规划,助您轻松上手并精通 C# 与 XAML 编程技巧,打造高效多端一致用户体验的移动与桌面应用程序
【9月更文挑战第8天】Uno Platform 的社区资源与学习路径推荐旨在为初学者和开发者提供全面指南,涵盖官方文档、GitHub 仓库及社区支持,助您掌握使用 C# 和 XAML 创建跨平台原生 UI 的技能。从官网入门教程到进阶技巧,再到活跃社区如 Discord,本指南带领您逐步深入了解 Uno Platform,并提供实用示例代码,帮助您在 Windows、iOS、Android、macOS、Linux 和 WebAssembly 等平台上高效开发。建议先熟悉 C# 和 XAML 基础,然后实践官方教程,研究 GitHub 示例项目,并积极参与社区讨论,不断提升技能。
92 2
|
3月前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
C#/.NET/.NET Core推荐学习书籍(24年8月更新)

相关实验场景

更多