又到了令人开心和愉快的周末时光!原本计划这个周末去河边玩路亚微物钓鱼,不过上周下了几天雨,导致河水暴涨,无法安全地玩耍。为了保证安全,我决定改去三一水库钓小鱼,毕竟水库的深度只有大约1.5米,环境也很舒适。

钓位环境

我准备了一根6.3米长的钓竿,上面挂玉米,打算用来钓鲤鱼;另外还有一根3.6米短竿,用来钓小鲫鱼。

阅读全文 »

- 【Hexo】GitHub博客多项目重定向配置多个顶级域名

闲来无事用博客名新注册了一个域名:www.bytefisher.top 刚开通博客的时候随便注册了一个: www.ai-fish.top 想着新域名和博客名称一致要好记一些,但是也不想直接替换原来的域名,毕竟花了钱买的,不能浪费。就想着给博客同时绑定两个顶级域名,然而GitHub Pages 只支持一个自定义域名,为了要兼容旧域名的访问,在网上一翻搜索查找,还真找到了一些方案:

  • 301重定向

  • 服务器重定向

  • GitHub多项目重定向

  • 域名注册商重定向

大概看了一下,对于向我这种新手小白,还是觉得GitHub多项目重定向这一方案要简单一些。那就先折腾简单的吧,另外几种方案有机会再尝试。

- 建立中转仓库

需要在 GitHub 上再新建一个仓库,用来中转旧域名 www.ai-fish.top 中的访问到新的域名 www.bytefisher.top 中转仓库里面不会有过多内容。创建它只是为了存放 CNAME 文件 和 404.html文件,告诉 GitHub Pages 我们有两个域名而已。我创建了一个名为ByteFisher的仓库,正常情况下,访问这个仓库 GitHub Pages 的域名前缀为 用户名.github.io/ByteFisher
图1 创建中转仓库 ByteFisher

- 添加 GitHub Pages 服务

图2 中转仓库CNAME文件中填写旧的域名 :www.ai-fish.top

图3 修改博客主仓库中CNAME文件,填写新的域名:www.bytefisher.top

阅读全文 »

- C# 继承

继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。

当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。

继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。

- 基类和派生类

一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。

C# 中创建派生类的语法如下:

1
2
3
4
5
6
7
8
<访问修饰符> class <基类>
{
...
}
class <派生类> : <基类>
{
...
}

假设,有一个基类 Shape,它的派生类是 Rectangle:

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
namespace InheritanceApplication
{
class Shape
{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
protected int width;
protected int height;
}

// 派生类
class Rectangle: Shape
{
public int getArea()
{
return (width * height);
}
}

class RectangleTester
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();

Rect.setWidth(5);
Rect.setHeight(7);

// 打印对象的面积
Console.WriteLine("总面积: {0}", Rect.getArea());
Console.ReadKey();
}
}
}

当上面的代码被编译和执行时,它会产生下列结果:

总面积: 35

- 基类的初始化

派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。

下面的程序演示了这点:

阅读全文 »

- C# 类(Class)

当你定义一个类时,你定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作。对象是类的实例。构成类的方法和变量称为类的成员。

- 类的定义

类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。下面是类定义的一般形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<access specifier> class  class_name
{
// member variables
<access specifier> <data type> variable1;
<access specifier> <data type> variable2;
...
<access specifier> <data type> variableN;
// member methods
<access specifier> <return type> method1(parameter_list)
{
// method body
}
<access specifier> <return type> method2(parameter_list)
{
// method body
}
...
<access specifier> <return type> methodN(parameter_list)
{
// method body
}
}

请注意:

  • 访问标识符 指定了对类及其成员的访问规则。如果没有指定,则使用默认的访问标识符。类的默认访问标识符是 internal,成员的默认访问标识符是 private。

  • 数据类型 指定了变量的类型,返回类型 指定了返回的方法返回的数据类型。

  • 如果要访问类的成员,你要使用点(.)运算符。

  • 点运算符链接了对象的名称和成员的名称。

下面的实例说明了目前为止所讨论的概念:

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
namespace BoxApplication
{
class Box
{
public double length; // 长度
public double breadth; // 宽度
public double height; // 高度
}
class Boxtester
{
static void Main(string[] args)
{
Box Box1 = new Box(); // 声明 Box1,类型为 Box
Box Box2 = new Box(); // 声明 Box2,类型为 Box
double volume = 0.0; // 体积

// Box1 详述
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;

// Box2 详述
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;

// Box1 的体积
volume = Box1.height * Box1.length * Box1.breadth;
Console.WriteLine("Box1 的体积: {0}", volume);

// Box2 的体积
volume = Box2.height * Box2.length * Box2.breadth;
Console.WriteLine("Box2 的体积: {0}", volume);
Console.ReadKey();
}
}
}
阅读全文 »

- C# 枚举(Enum)

枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。

C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。

枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。

说明: 枚举其实就是特殊的常量类,且构造方法被默认强制是私有。

正例: 枚举名字: DealStatusEnum, 成员名称: SUCCESS / UNKOWN_REASON

- 声明 enum 变量

声明枚举的一般语法:

1
2
3
4
enum <enum_name>
{
enumeration list
};

其中,

enum_name 指定枚举的类型名称。
enumeration list 是一个用逗号分隔的标识符列表。

枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.例如:

1
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };

下面的实例演示了枚举变量的用法:

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;

public class EnumTest
{
enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

static void Main()
{
int x = (int)Day.Sun;
int y = (int)Day.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
}
阅读全文 »

- C# 结构体(Struct)

在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。

结构体是用来代表一个记录。假设您想跟踪图书馆中书的动态。您可能想跟踪每本书的以下属性:

  • Title

  • Author

  • Subject

  • Book ID

- 定义结构体

为了定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。

例如,您可以按照如下的方式声明 Book 结构:

1
2
3
4
5
6
7
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};

下面的程序演示了结构的用法:

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Text;

struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};

public class testStructure
{
public static void Main(string[] args)
{

Books Book1; /* 声明 Book1,类型为 Books */
Books Book2; /* 声明 Book2,类型为 Books */

/* book 1 详述 */
Book1.title = "C Programming";
Book1.author = "Nuha Ali";
Book1.subject = "C Programming Tutorial";
Book1.book_id = 6495407;

/* book 2 详述 */
Book2.title = "Telecom Billing";
Book2.author = "Zara Ali";
Book2.subject = "Telecom Billing Tutorial";
Book2.book_id = 6495700;

/* 打印 Book1 信息 */
Console.WriteLine( "Book 1 title : {0}", Book1.title);
Console.WriteLine("Book 1 author : {0}", Book1.author);
Console.WriteLine("Book 1 subject : {0}", Book1.subject);
Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);

/* 打印 Book2 信息 */
Console.WriteLine("Book 2 title : {0}", Book2.title);
Console.WriteLine("Book 2 author : {0}", Book2.author);
Console.WriteLine("Book 2 subject : {0}", Book2.subject);
Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);

Console.ReadKey();

}
}

当上面的代码被编译和执行时,它会产生下列结果:

Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
阅读全文 »