当前位置: 首页 > 编程日记 > 正文

数据结构与算法:04 C#面向对象设计 II

04 C#面向对象设计 II

知识结构:

图1 知识结构


5、属性

例1:属性概念的引入(问题)

图2 Class Diagram

public class Animal
{public int Age;public double Weight;public bool Sex;public Animal(int age, double weight, bool sex){Age = age;Weight = weight;Sex = sex;}public void Eat(){Console.WriteLine("Animal Eat.");}public void Sleep(){Console.WriteLine("Animal Sleep.");}public override string ToString(){return string.Format("Animal Age:{0},Weight:{1},Sex:{2}",Age, Weight, Sex);}
}class Program
{static void Main(string[] args){Animal al = new Animal(1, 1.2, false);Console.WriteLine("Animal Age:{0},Weight:{1},Sex:{2}",al.Age, al.Weight, al.Sex);// Animal Age:1,Weight:1.2,Sex:Falseal.Age = -1;al.Weight = -0.5;Console.WriteLine(al);// Animal Age:-1,Weight:-0.5,Sex:False}
}

例2:问题的解决(Java语言解决该问题的方案)

图3 Class Diagram

public class Animal
{private int _age;private double _weight;private readonly bool _sex;public int GetAge(){return _age;}public void SetAge(int value){_age = (value > 0) ? value : 0;}public double GetWeight(){return _weight;}public void SetWeight(double value){_weight = (value > 0) ? value : 0;}public bool GetSex(){return _sex;}public Animal(int age, double weight, bool sex){_age = (age > 0) ? age : 0;_weight = (weight > 0) ? weight : 0;_sex = sex;}public void Eat(){Console.WriteLine("Animal Eat.");}public void Sleep(){Console.WriteLine("Animal Sleep.");}public override string ToString(){return string.Format("Animal Age:{0},Weight:{1},Sex:{2}",_age, _weight, _sex);}
}class Program
{static void Main(string[] args){Animal al = new Animal(1, 1.2, false);Console.WriteLine("Animal Age:{0},Weight:{1},Sex:{2}",al.GetAge(), al.GetWeight(), al.GetSex());// Animal Age:1,Weight:1.2,Sex:Falseal.SetAge(-1);al.SetWeight(-0.5);Console.WriteLine(al);// Animal Age:0,Weight:0,Sex:False}
}

例3:属性的提出

图4 Class Diagram

public class Animal
{private int _age;private double _weight;private readonly bool _sex;public int Age{get { return _age; }set { _age = (value > 0) ? value : 0; }}public double Weight{get { return _weight; }set { _weight = (value > 0) ? value : 0; }}public bool Sex{get { return _sex; }}public Animal(int age, double weight, bool sex){_age = (age > 0) ? age : 0;_weight = (weight > 0) ? weight : 0;_sex = sex;}public void Eat(){Console.WriteLine("Animal Eat.");}public void Sleep(){Console.WriteLine("Animal Sleep.");}public override string ToString(){return string.Format("Animal Age:{0},Weight:{1},Sex:{2}",Age, Weight, Sex);}
}class Program
{static void Main(string[] args){Animal al = new Animal(1, 1.2, false);Console.WriteLine("Animal Age:{0},Weight:{1},Sex:{2}",al.Age, al.Weight, al.Sex);// Animal Age:1,Weight:1.2,Sex:Falseal.Age = -1;al.Weight = -0.5;Console.WriteLine(al);// Animal Age:0,Weight:0,Sex:False}
}

说明:C#在声明data时就可以定义setget方法。

  • get:定义读取操作。
  • set:定义赋值操作,value表示传入的参数值。

例4:属性的简化

图5 Class Diagram

public class Animal
{private int _age;private double _weight;public int Age{get { return _age; }set { _age = (value > 0) ? value : 0; }}public double Weight{get { return _weight; }set { _weight = (value > 0) ? value : 0; }}public bool Sex { get; private set; }public Animal(int age, double weight, bool sex){_age = (age > 0) ? age : 0;_weight = (weight > 0) ? weight : 0;Sex = sex;}public void Eat(){Console.WriteLine("Animal Eat.");}public void Sleep(){Console.WriteLine("Animal Sleep.");}public override string ToString(){return string.Format("Animal Age:{0},Weight:{1},Sex:{2}",Age, Weight, Sex);}
}
class Program
{static void Main(string[] args){Animal al = new Animal(1, 1.2, false);Console.WriteLine("Animal Age:{0},Weight:{1},Sex:{2}",al.Age, al.Weight, al.Sex);// Animal Age:1,Weight:1.2,Sex:Falseal.Age = -1;al.Weight = -0.5;Console.WriteLine(al);// Animal Age:0,Weight:0,Sex:False}
}

6、索引器

6.1 定义

是集合类中的一种特殊属性,可使得集合类中的元素像数组元素一样访问。

6.2 语法结构

public 元素类型 this[int index]
{get { ... }set { ... }
}
public 元素类型 this[string name]
{get { ... }set { ... }
}

例5:利用索引器实现对集合类StudentSet中元素Student的访问。

图6 Class Diagram

public class Student
{private string _name;public string Name{get { return _name; }set{_name = string.IsNullOrEmpty(value)? "NULL": value;}}public long ID { get; set; }public Student(long id, string name){ID = id;_name = name;}public override string ToString(){return string.Format("ID:{0},Name:{1}", ID, Name);}
}public class StudentSet
{private readonly int _maxCount = 500;private readonly Student[] _stus;public int Count{get; private set;}public StudentSet(){Count = 0;_stus = new Student[_maxCount];}public void Add(Student stu){if (stu == null)throw new ArgumentNullException();if (Count == _maxCount)throw new IndexOutOfRangeException();_stus[Count] = stu;Count++;}public Student this[int index]{get{if (index < 0 || index > Count - 1)throw new IndexOutOfRangeException();return _stus[index];}set{if (index < 0 || index > Count - 1)throw new IndexOutOfRangeException();if (value == null)throw new ArgumentNullException();_stus[index] = value;}}
}class Program
{static void Main(string[] args){StudentSet stuSet = new StudentSet();stuSet.Add(new Student(10086, "张三"));stuSet.Add(new Student(95988, "李四"));stuSet[1].Name = string.Empty;Console.WriteLine(stuSet.Count); // 2Console.WriteLine(stuSet[0]); // ID:10086,Name:张三Console.WriteLine(stuSet[1]); // ID:95988,Name:NULLConsole.WriteLine(stuSet[2]);//未处理的异常:  System.IndexOutOfRangeException: 索引超出了数组界限。}
}

7、接口

7.1 概念

  • 接口是类设计的蓝图,即只提供声明而没有实现。
  • 接口不可以直接实例化对象(与抽象类相同)。
  • C#允许一个类实现多个接口(注意与继承的区别)。
  • 接口就是包含一系列不被实现的方法,而把这些方法的实现交给继承它的类。

7.2 表示

图7 Class Diagram

例6:根据类图利用Dog实现IAnimal接口

图8 Class Diagram

public interface IAnimal
{int Age { get; set; }double Weight { get; set; }void Eat();void Sleep();
}public class Dog : IAnimal
{private int _age;private double _weight;public int Age{get { return _age; }set { _age = (value >= 0) ? value : 0; }}public double Weight{get { return _weight; }set { _weight = (value >= 0) ? value : 0; }}public void Eat(){Console.WriteLine("Dog Eat");}public void Sleep(){Console.WriteLine("Dog Sleep");}
}class Program
{static void Main(string[] args){IAnimal al = new Dog();al.Age = 1;al.Weight = 2.5;Console.WriteLine("Dog:Age={0},Weight={1}",al.Age, al.Weight);// Dog:Age=1,Weight=2.5al.Eat();// Dog Eatal.Sleep();// Dog Sleep}
}

例7:利用接口实现“饲养系统”

某饲养员(Raiser)在目前状态下需要饲养三种动物:狗(Dog)、鸟(Bird)和鱼(Fish),该三种动物只需要让其睡觉(Sleep)和吃饭(Eat)即可。请设计该饲养系统,要求满足软件设计的“开闭原则”。

方案一:(在抽象类部分已经给出)

图9 利用抽象类实现饲养系统

方案二:

图10 利用接口实现饲养系统

public interface IAnimal
{int Age { get; set; }double Weight { get; set; }void Eat();void Sleep();
}public class Bird : IAnimal
{private int _age;private double _weight;public int Age{get { return _age; }set { _age = (value >= 0) ? value : 0; }}public double Weight{get { return _weight; }set { _weight = (value >= 0) ? value : 0; }}public void Eat(){Console.WriteLine("Bird Eat.");}public void Sleep(){Console.WriteLine("Bird Sleep.");}public void Fly(){Console.WriteLine("Bird Fly.");}
}public class Dog : IAnimal
{private int _age;private double _weight;public int Age{get { return _age; }set { _age = (value >= 0) ? value : 0; }}public double Weight{get { return _weight; }set { _weight = (value >= 0) ? value : 0; }}public void Eat(){Console.WriteLine("Dog Eat.");}public void Sleep(){Console.WriteLine("Dog Sleep.");}public void Run(){Console.WriteLine("Dog Run.");}
}public class Fish : IAnimal
{private int _age;private double _weight;public int Age{get { return _age; }set { _age = (value >= 0) ? value : 0; }}public double Weight{get { return _weight; }set { _weight = (value >= 0) ? value : 0; }}public void Eat(){Console.WriteLine("Fish Eat.");}public void Sleep(){Console.WriteLine("Fish Sleep.");}public void Swim(){Console.WriteLine("Fish Swim.");}
}public class Raiser
{public void Raise(IAnimal al){al.Eat();al.Sleep();}
}class Program
{static void Main(string[] args){Raiser rsr = new Raiser();rsr.Raise(new Dog());// Dog Eat.// Dog Sleep.rsr.Raise(new Bird());// Bird Eat.// Bird Sleep.rsr.Raise(new Fish());//Fish Eat.//Fish Sleep.}
}

7.3 接口(interface)与抽象类(abstract class)

(1)相同点:

  • 接口与抽象类都不可以直接实例化对象。

(2)不同点:

  • 抽象类中的数据和操作必须有限制修饰符,而接口中的数据和操作不可以有限制修饰符。
  • 抽象类中可以有带实现体的方法(非abstract方法),而接口只能有方法的声明。
  • 抽象类在子类中通过override关键字覆写抽象方法,而接口被子类直接实现。

例8:一个类可以实现多个接口,但要注意多个接口中有重名方法的处理。

方式一:

图11 Class Diagram

public interface IHighWayWorker
{void HighWayOperation();void Build();
}public interface IRailWayWorker
{void RailWayOperation();void Build();
}public class Worker : IRailWayWorker, IHighWayWorker
{public void HighWayOperation(){Console.WriteLine("HighWayOperation.");}public void RailWayOperation(){Console.WriteLine("RailWayOperation");}public void Build(){Console.WriteLine("HighWay,RailWay,Build.");}
}class Program
{static void Main(string[] args){Worker wr = new Worker();wr.Build(); // HighWay,RailWay,Build.IHighWayWorker hwr = new Worker();hwr.Build(); // HighWay,RailWay,Build.hwr.HighWayOperation(); // HighWayOperation.IRailWayWorker rwr = new Worker();rwr.Build(); // HighWay,RailWay,Build.rwr.RailWayOperation();// RailWayOperation}
}

方式二:

图12 Class Diagram

public interface IHighWayWorker
{void HighWayOperation();void Build();
}public interface IRailWayWorker
{void RailWayOperation();void Build();
}public class Worker : IHighWayWorker, IRailWayWorker
{public void HighWayOperation(){Console.WriteLine("HighWayOperation.");}public void RailWayOperation(){Console.WriteLine("RailWayOperation");}void IHighWayWorker.Build(){Console.WriteLine("HighWay Build.");}void IRailWayWorker.Build(){Console.WriteLine("RailWay Build.");}// 注意:void IHighWayWorker.Build()和void IRailWayWorker.Build()// 前面不能够加限制修饰符。
}class Program
{static void Main(string[] args){Worker wr = new Worker();//wr.Build(); 该语句错误IHighWayWorker hwr = new Worker();hwr.Build();//HighWay Build.hwr.HighWayOperation();//HighWayOperation.IRailWayWorker rwr = new Worker();rwr.Build();//RailWay Build.rwr.RailWayOperation();//RailWayOperation}
}

8、泛型

例9:存储int数据类型的集合及操作。

public class IntSet
{private readonly int _maxSize;private readonly int[] _set;public IntSet(){_maxSize = 100;_set = new int[_maxSize];//...}public void Insert(int k, int x){//...._set[k] = x;}public int Locate(int k){//...return _set[k];}
}class Program
{static void Main(string[] args){IntSet iSet = new IntSet();iSet.Insert(0, 123);int i = iSet.Locate(0);Console.WriteLine(i); // 123}
}

例10:存储string数据类型的集合及操作。

public class StringSet
{private readonly int _maxSize;private readonly string[] _set;public StringSet(){_maxSize = 100;_set = new string[_maxSize];//...}public void Insert(int k, string x){//...._set[k] = x;}public string Locate(int k){//...return _set[k];}
}class Program
{static void Main(string[] args){StringSet strSet = new StringSet();strSet.Insert(0, "abc");string j = strSet.Locate(0);Console.WriteLine(j); // abc}
}

例11:利用object类存储通用数据类型的集合及操作。

public class GSet
{private readonly int maxSize;private readonly object[] _set;public GSet(){maxSize = 100;_set = new object[maxSize];//...}public void Insert(int k, object x){//...._set[k] = x;}public object Locate(int k){//...return _set[k];}
}class Program
{static void Main(string[] args){GSet gSet1 = new GSet();gSet1.Insert(0, 123);int k1 = (int)gSet1.Locate(0);Console.WriteLine(k1); // 123GSet gSet2 = new GSet();gSet2.Insert(0, "abc");string k2 = (string)gSet2.Locate(0);Console.WriteLine(k2); // abcGSet gSet3 = new GSet();gSet3.Insert(0, 123);gSet3.Insert(1, "abc");//编译时可以通过,运行时出现异常。int k3 = (int)gSet3.Locate(1); //这样使用存在类型安全问题。Console.WriteLine(k3);// 未处理的异常:  System.InvalidCastException: 指定的转换无效。}
}

泛型定义:即参数化类型。

在编译时用一个具体类型代替该参数类型,可定义类型安全的类而不影响工作效率。

例12:利用泛型T存储通用数据类型的集合及操作。

public class GSet<T>
{private readonly int _maxSize;private readonly T[] _set;public GSet(){_maxSize = 100;_set = new T[_maxSize];//...}public void Insert(int k, T x){//...._set[k] = x;}public T Locate(int k){//...return _set[k];}
}class Program
{static void Main(string[] args){GSet<int> gSet1 = new GSet<int>();gSet1.Insert(0, 123);int k1 = gSet1.Locate(0);Console.WriteLine(k1); // 123GSet<string> gSet2 = new GSet<string>();gSet2.Insert(0, "abc");string k2 = gSet2.Locate(0);Console.WriteLine(k2); // abc}
}

我们把T称为类型参数,当然我们也可以对T进行约束。

例13:为类型参数T增加约束,比如T只能是值类型。

public class GSet<T> where T : struct
{private readonly int _maxSize;private readonly T[] _set;public GSet(){_maxSize = 100;_set = new T[_maxSize];//...}public void Insert(int k, T x){//...._set[k] = x;}public T Locate(int k){//...return _set[k];}
}class Program
{static void Main(string[] args){GSet<int> gSet1 = new GSet<int>();gSet1.Insert(0, 123);int k1 = gSet1.Locate(0);Console.WriteLine(k1); // 123// GSet<string> gSet2 = new GSet<string>(); // 编译错误// 错误 CS0453 类型“string”必须是不可以为 null 值的类型,// 才能用作泛型类型或方法“GSet < T >”中的参数“T”	}
}

有关泛型约束可以查看以下图文:

  • 技术图文:C#语言中的泛型 I
  • 技术图文:C#语言中的泛型 II

9、类与类之间的关系

图13 依赖关系

public class Oxygen
{//...
}public class Water
{//...
}public abstract class Animal
{public int Age;public double Weight;public abstract void Eat();public abstract void Sleep();public abstract void Breed();public abstract void Metabolism(Oxygen o2, Water water);
}

图14 继承关系

public class Bird : Animal
{public string Feather;public void Fly(){//...}public void Egg(){//...}public override void Eat(){//...}public override void Sleep(){//...}public override void Breed(){//...}public override void Metabolism(Oxygen o2, Water water){//...}
}public class Penguin : Bird
{//...
}public class Goose : Bird
{//...
}public class Duck : Bird
{//...
}

图15 关联关系

public class Climate
{//...
}public class Penguin : Bird
{private Climate _climate;//...
}

图16 实现关系

public interface ILanguage
{void Speak();
}
public class DonaldDuck : Duck, ILanguage
{public void Speak(){//...}//...
}

后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:



相关文章:

SharePoint迁移和升级方案

这是之前针对SharePoint迁移和升级写的方案&#xff0c;去掉了敏感的部分&#xff0c;共大家交流吧。SharePointMigrationSolution转载于:https://www.cnblogs.com/zhaojunqi/archive/2012/04/12/2444803.html

零基础如何掌握web前端开发技能

很多零基础学员想要进入到互联网行业都会选择web前端做首选技术语言来学习&#xff0c;但是学习web前端不是那么容易的&#xff0c;想要成为一名合格的web前端工程师&#xff0c;所要掌握的技能一定要会&#xff0c;下面小编就为大家详细的介绍一下零基础如何掌握web前端开发技…

数据结构与算法:05 Leetcode同步练习(一)

Leetcode同步练习&#xff08;一&#xff09; 题目01&#xff1a;两数之和 题号&#xff1a;1难度&#xff1a;简单https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个整数&#xff0c;…

用Asp.net实现简单的文字水印

经常看见MOP上有人贴那种动态的图片&#xff0c;就是把一个字符串作为参数传给一个动态网页&#xff0c;就会生成一个带有这个字符串的图片&#xff0c;这个叫做文字水印。像什么原来的熊猫系列&#xff0c;还有后来的大树和金条&#xff0c;都挺有意思。这东西看着挺好玩的&am…

yum国内镜像

Centos-7修改yum源为国内的yum源 国外地址yum源下载慢,下到一半就断了,就这个原因就修改它为国内yum源地址 国内也就是ali 与 网易 以centos7为例 ,以 修改为阿里的yum源 先确定有wget 备份本地yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_…

HTML的标签分为哪几类?各标签语法格式是怎样的?

HTML的标签分为哪几类?各标签语法格式是怎样的?相信大家在学习HTML课程的时候&#xff0c;有讲到这方面的知识&#xff0c;根据标签的组成特点&#xff0c;通常将HTML标签分为两大类&#xff0c;分别是“双标签”、“单标签”&#xff0c;对它们的具体介绍如下。 1.双标签 双…

数据结构与算法:06 线性表

06 线性表 知识结构&#xff1a; 1. 线性表的定义与操作 1.1 线性表的定义 线性表&#xff08;Linear List&#xff09;是由n(n≥0)n (n≥0)n(n≥0)个相同类型的数据元素a0,a1,⋯,an−1a_0,a_1,⋯,a_{n-1}a0​,a1​,⋯,an−1​组成的序列。即表中除首尾元素外&#xff0c;其…

MySQL提权简单方法

前不久网上公开了一个MySQL Func的漏洞,讲的是使用MySQL创建一个自定义的函数,然后通过这个函数来攻击服务器。最早看到相关的报道是在o-otik上,但是公布的是针对 Unix系统的Exploit,并且成功率也不是很高.而近期,国内有高手放出针对Win系统的相关文章,于是我马上找来与朋友一同…

转载LINQ优点 自己学习用的

这几天在读一本LINQ方面的书《Essential LINQ》,在这里和大家分享下。 由于对LINQ的深入总结需要大量的篇幅&#xff0c;因此在这里分成几个部分来讲。 &#xff08;*我看《Essential LINQ》是英文版的&#xff0c;有些名词不能翻译成正统的中文解释请给予谅解&#xff09; LIN…

什么是Python?好学吗?

互联网IT行业是很多人都比较关注的行业&#xff0c;大部分都想学习IT技术进入到这个行业&#xff0c;Python编程语言在近几年是多数人的选择&#xff0c;那么什么是Python?好学吗?具体来看看下面的详细介绍吧。 一、什么是python 网络上对python的解释是一门解释型、面向对象…

数据结构与算法:07 Leetcode同步练习(二)

目录 题目01&#xff1a;回文数题目02&#xff1a;x 的平方根题目03&#xff1a;爬楼梯题目04&#xff1a;买卖股票的最佳时机题目05&#xff1a;买卖股票的最佳时机 II题目06&#xff1a;跳跃游戏题目07&#xff1a;三数之和题目08&#xff1a;最接近的三数之和题目09&#x…

(五)Docker镜像和容器

之所以在之前没有讲什么是镜像和容器是因为如果你没有一个最初的认识&#xff0c;那么你就很难理解镜像和容器以及它们的区别。我相信在前面一章中的讲述中&#xff0c;你应该稍有体会容器是基于镜像构建的&#xff0c;同时构建了容器之后如果不删除就会一直存在&#xff0c;而…

翻译-高质量JavaScript代码书写基本要点(转载)

by zhangxinxu from http://www.zhangxinxu.com本文地址&#xff1a;http://www.zhangxinxu.com/wordpress/?p1173 原文作者&#xff1a;Stoyan Stefanov原文链接&#xff1a;The Essentials of Writing High Quality JavaScript 翻译编辑&#xff1a;张鑫旭//zxx: 俗不可耐的…

学习ui设计的流程是什么

UI设计在如今的市场行情中是很多企业都必不可少的一个技术岗位&#xff0c;UI设计是比较注重自身产品的用户体验的&#xff0c;想要学习UI设计&#xff0c;一定要做足功课&#xff0c;下面小编就为大家详细的介绍一下学习ui设计的流程是什么? 学习ui设计的流程是什么?总体进程…

数据结构与算法:08 Leetcode同步练习(三)

目录 题目01&#xff1a;合并两个有序链表题目02&#xff1a;删除排序链表中的重复元素题目03&#xff1a;环形链表题目04&#xff1a;反转链表题目05&#xff1a;删除链表中的节点题目06&#xff1a;两数相加题目07&#xff1a;删除链表的倒数第N个节点题目08&#xff1a;两两…

Linux之进程管理

程序是保存在外部存储设备&#xff08;如硬盘&#xff09;中的可执行机器代码和数据的集合。而进程是在CPU及内存中处于动态执行状态的计算机程序。每个程序启动后会产生一个或多个进程&#xff0c;如httpd程序&#xff0c;当有大量用户访问Web页面时&#xff0c;httpd程序会产…

win8 metro 拖拽重排grid

0.1 http://1.metrowin8.sinaapp.com/Code/index.html 拖拽重排实现思路 &#xff1a; 1.初始化拖拽对象时&#xff0c;上传拖拽对象中心点信息(包括id,className) 2.鼠标按下时&#xff0c;制造一个假的拖拽对象 3.鼠标放开时&#xff0c;计算鼠标与拖拽对象中心点的距离&…

什么是AngularJS?它有哪些特性?

AngulaJS是款非常优秀的JasSetpsn结构化框架,可以用来构建单页面应用程序&#xff0c;2009年,AngularJS由Misko Hevery等人创建&#xff0c;后来被Google收购&#xff0c;该技术已经被用于Coogle旗下的多款产品开发当中。开发人员不仅可以使用和扩展HTML语言的特性。而且可以更…

ELK安装文档及相关优化

前言&#xff1a;随着硬件成本的不断低廉&#xff0c;我们可以存储更多数据内容&#xff0c;也会对各数据加以利用&#xff0c;其中一项很重要的数据内容便是日志文件&#xff0c;无论是访问日志还是系统日志或是应用日志&#xff0c;都显得十分重要&#xff0c;而怎么加以利用…

数据结构与算法:09 栈与递归

09 栈与递归 知识结构&#xff1a; 栈是我们经常使用的一种数据结构&#xff0c;比如&#xff0c;手枪发射子弹的顺序与子弹压入弹夹的顺序是相反&#xff0c;即后压入弹夹的子弹先发射出来。又比如&#xff0c;我们使用的Word、Excel、Photoshop等软件系统中的撤销操作&#…

Javascript匿名函数

定义 匿名函数的定义非常简单&#xff1a;就是没有名字的函数。但是其用途非常的大 典型的函数定义方式 在看匿名函数之前我们先看下在Javascript中定义一个函数比较典型的几种方式 函数声明 function functionName(args) { //函数体 } 函数表达式 var functionName functi…

零基础学Java大数据难不难

java大数据如今在企业中用到的次数是非常多的&#xff0c;很多人都比较看好java技术&#xff0c;那么零基础学Java大数据难不难?想要学习java技术说难不难&#xff0c;说简单也不是很简单&#xff0c;来看看下面的详细介绍就知道了。 零基础学Java大数据难不难?因人而异&…

技术图文:01 面向对象设计原则

01 面向对象设计原则 知识结构&#xff1a; 一碟开胃的小菜 小菜今年计算机专业大四了&#xff0c;学了不少软件开发方面的东西&#xff0c;也学着编了些小程序&#xff0c;踌躇满志&#xff0c;一心要找一个好单位。当投递了无数简历后&#xff0c;终于收到了一个单位的面试…

关于GridView手动绑定的一段代码,一切尽在不言中

为GridView绑定主键的方法&#xff0c;在前台的DataGrid标签中加 DataKeyNames"ID" 后台获取ID&#xff1a; int idint.parse(this.GridView.DataKeys[e.RowIndex].Value.Tostring()); 如果DataKeyNames绑定了多个列取法&#xff1a;int idint.parse(this.G…

linux 服务器FTP服务安装教程

1.更新yum源 首先需要更新系统的yum源&#xff0c;便捷工具下载地址&#xff1a;http://help.aliyun.com/manual?spm0.0.0.0.zJ3dBU&helpId1692 2.安装vsftp 使用yum命令安装vsftp #yum install vsftpd -y 3.添加ftp帐号和目录 先检查一下nologin的位置&#xff0c;通常在…

CSS3颜色不透明度如何设置

web前端技术包含HTML和CSS样式&#xff0c;两者是相辅相成的&#xff0c;学习CSS样式不必可少&#xff0c;那么在学习CSS样式中&#xff0c;CSS3颜色不透明度如何设置?在CSS3之前&#xff0c;我们设置颜色的方式包含十六进制颜色(如#F00)、rgb模式颜色、或指定颜色的英文名称(…

技术图文:02 创建型设计模式(上)

创建型设计模式&#xff08;上&#xff09; 知识结构&#xff1a; 图1 知识结构 简单工厂模式 Sunny 软件公司欲基于 C# 语言开发一套图表库&#xff0c;该图表库可以为应用系统提供各种不同外观的图表&#xff0c;如&#xff1a; 柱状图&#xff08;histogram&#xff09;饼…

转:初探 jQuery 的 Sizzle 选择器

这是一篇关于介绍jQuery Sizzle选择器的文章&#xff0c;由我和obility共同完成。在文中&#xff0c;我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流程原理&#xff0c;以及末了以少许文字给你展示出如何借用Sizzle之手实现自定义选择器&#xff08;…

安装hadoop图文

1.下载hadoop-2.5.1,存放根目录 2.通过tar -zxvf 包名 来进行解压 3.通过mv命令将解压后的hadoop包移动到/home下 4.修改hadoop-en.sh配置文件,添加jdk的安装目录,操作如下图所示 5.修改core-site.xml配置文件,添加namenode的配置信息 6.修改hdfs-site.xml配置文件,添加seconda…

Java中父类方法重写有哪些需要注意的?

在继承关系中&#xff0c;子类会自动继承父类中公共的方法&#xff0c;但有时在子类中需要对继承的方法进行一些修改&#xff0c;即对父类的方法进行重写。需要注意的是&#xff0c;子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。 在上一节…