泛型的几种类型以及初识winform
今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧。首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法;最后简单的认识了webform,实现了一个简单的功能。
一.泛型
定义:泛型(generic)可以让多个类型共享一组代码,泛型允许我们声明类型参数化。可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念。C#中提供了五种泛型,类,结构,接口,委托和方法。下面举例说明可能更容易理解,
class MyStack<T>
{
T[] statkArray;
int stackPointer = ;
const int MaxStack = ;
bool IsStackFull { get { return stackPointer < MaxStack; } }
bool IsStackEmpty { get { return stackPointer <= ; } }
public void Push(T x)
{
if (!IsStackFull)
{
statkArray[stackPointer++] = x;
}
}
public T Pop()
{
return(!IsStackEmpty)?statkArray[--stackPointer]:statkArray[];
}
public void Print()
{
for (int i = stackPointer-; i>= ; i--)
{
Console.WriteLine("value;{0}",statkArray[i]);
}
}
}
class Program
{
static void Main(string[] args)
{
MyStack<int> stackint = new MyStack<int>();
MyStack<string> stackstring = new MyStack<string>(); stackint.Push();
stackint.Push();
stackint.Push();
stackint.Push(); stackint.Print();
stackstring.Push("Hava a good day");
stackstring.Push("Hi there!");
stackstring.Print();
Console.ReadKey();
}
}
像上面的就是定义了一个泛型,传的参数值可以是int,string等的类型。
二.泛型的委托
我想其前几天学习委托时间感觉很抽象额,把方法作为参数来传值,初次接触所以再后来自己写委托方发时间不知道该怎么下手,后来知道啦,但是还是不熟悉的,因为见得真的很少,可是今天讲完泛型的委托时间感觉更深一层的理解了委托,或许在大家看来很简单吧,但是我还是一个初学者,还是需要好好学习的好好写程序的。泛型的委托也是比较抽象的,写个例子给看下吧。
class simple
{
static public void PrintString(string s)
{
Console.WriteLine(s);
}
static public void PrintUpperString(string s)
{
Console.WriteLine("{0}",s.ToUpper());
}
}
delegate void MyDelegate<T>(T value);
class Program
{
static void Main(string[] args)
{
var mydel = new MyDelegate<string>(simple.PrintString);
mydel += simple.PrintUpperString;
mydel("rocky");
Console.ReadKey();
}
}
嘿嘿,这个简单的小例子很容易理解吧,嘿嘿。
三.泛型的接口
泛型的接口这个很简单的啦感觉,可能是因为还没有写几个小例子吧,不过从定义上面我理解啦,用一个小例子帮助我们记忆啦。
interface IMyfc<T>
{
T returnIt(T inValue);
}
class Simple<S>:IMyfc<S>
{
public S returnIt(S inValue)
{
return inValue;
}
}
class Program
{
static void Main(string[] args)
{
var trivInt = new Simple<int>();
var trivString = new Simple<string>();
Console.WriteLine(trivInt.returnIt());
Console.WriteLine(trivString.returnIt("张三"));
Console.ReadKey();
}
}
这个小例子看完很容易理解吧,嘿嘿···
四. 枚举器迭代器 :
在这里说的就是foreach有两个方法IEnumerable()与GetEnumerable(),这个简单了解下就好啦,不过foreach要学会用额。
class Program
{
static void Main(string[] args)
{
int[] arr1 = {,,, };
foreach (var item in arr1)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
五.程序集
其实程序集就是在不同的项目中,要想引用他的方法,那么就需要添加引用,而之后我们就可以使用其中的方法。
选择要添加的程序集即可。
六.扩展方法
class MyData
{
private double d1;
private double d2;
private double d3;
public MyData(double d1, double d2, double d3)
{
this.d1 = d1;
this.d2 = d2;
this.d3 = d3;
}
public double Sum()
{
return d1 + d2 + d3;
}
}
static class MyExtension
{
public static string MyObjectMethod(this object dsadsa,string content)
{
return content + "|";
}
public static double MyDataMethod(this MyData date,double d1,double d2,double d3)
{
return (d1 + d2 + d3) / ;
}
}
class Program
{
static void Main(string[] args)
{
// object o = new object();
//Console.WriteLine(o.MyObjectMethod("我是我"));
MyData date = new MyData(,,);
Console.WriteLine(date.MyDataMethod(, , ));
Console.ReadKey();
}
}
这是一个简单的扩展方法的例子。
七.用winform实现加减乘除的功能。
页面:
后台代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{ } private void btn1_Click(object sender, EventArgs e)
{
string num = this.txt1.Text;
string num0 = this.txt2.Text;
if (string.IsNullOrEmpty(num) || string.IsNullOrEmpty(num0))
{
MessageBox.Show("请输入数字");
}
else
{
int num1 = int.Parse(num);
int num2 = int.Parse(num0);
string comb = (this.comboBox1.SelectedItem).ToString();
int resoult = ;
switch (comb)
{
case "+": resoult = num1 + num2;
break;
case "-": resoult = num1 - num2;
break;
case "*": resoult = num1 * num2;
break;
case "/":
if (num2 != )
{
resoult = num1 / num2;
}
else
{
MessageBox.Show("输入有误,除数不能为0,请重新输入");
}
break;
default: break;
}
this.txt3.Text = resoult.ToString();
}
}
private void btnclear_Click(object sender, EventArgs e)
{
this.txt1.Text=string.Empty;
this.txt2.Text = string.Empty;
this.txt3.Text = string.Empty;
this.comboBox1.Text = string.Empty;
}
}
好啦,我今天学习了这些,有些以后可能我要是做项目用不到啦,但是我感觉还是做好了解下,掌握啦。这是在云何学院学习的第21天,感觉还不错,开始初识写些简单的程序啦。
泛型的几种类型以及初识winform的更多相关文章
- CSharpGL(15)用GLSL渲染2种类型的文字
CSharpGL(15)用GLSL渲染2种类型的文字 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合 ...
- <WinForm_1>初识WinForm编程
暑假花了一个多月自学了Win32 SDK编程,不敢说成为了高手,但是还是颇具收获——windows的消息机制(著名的消息循环).一切控件均是窗口…… 曾经有一位网友(和我一个专业的)向我吐槽:Win3 ...
- java泛型-自定义泛型方法与类型推断总结
下面是自定义泛型方法的练习: package com.mari.generic; import java.util.ArrayList; import java.util.Collection; im ...
- 【C#】获取泛型<T>的真实类型
需求:在包含泛型T的类或方法中,想要根据T的具体类型,进行相应的处理,需求伪代码如下: public void Test<T>() { if(T is string) { // do so ...
- Java 泛型,你了解类型擦除吗?
泛型,一个孤独的守门者. 大家可能会有疑问,我为什么叫做泛型是一个守门者.这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇.泛型是 Java 中一个很小巧的概念,但 ...
- HTML之DocType的几种类型 -转载
HTML之DocType的几种类型转载 doctype类型详细doctype的几种类型html之doctype 分类: 前端文摘 在默认情况下,FF和IE的解释标准是不一样的,也就是说,如果一个网页 ...
- javascript四种类型识别的方法
× 目录 [1]typeof [2]instanceof [3]constructor[4]toString 前面的话 javascript有复杂的类型系统,类型识别则是基本的功能.javascrip ...
- 【C】二级指针探秘 & 星号的两种用法(1.与基本类型结合形成另一种类型,比如与int结合形成int* 2.取值操作)
1)问题:二级指针到底是什么?怎么用的?怎么存放的? #include <stdio.h> #define TEST_ADDR 0x12FF40 void main() { int a = ...
- .NET环境下导出Excel表格的两种方式和导入两种类型的Excel表格
一.导出Excel表格的两种方式,其中两种方式指的是导出XML数据类型的Excel(即保存的时候可以只需要修改扩展名为.xls)和真正的Excel这两种. using System; using Sy ...
随机推荐
- oozie调度sqoop脚本时操作符号替换
oozie调度sqoop脚本时,sqoop中使用的sql查询语句,需要使用以下字符串替换操作符,否则会出现各种诡异的错误: //替换字符 < < Less than 小于 > > ...
- win7怎么把软件加入开机启动项
点击开机菜单进入. 2 然后点击菜单栏中的所有程序. 3 在所有程序中找到‘启动’,这个启动就是开机启动项来的. 4 右键进行打开启动项. 5 把快捷方式复制到开机启动项中.如果找不到快捷方式可以右键 ...
- 怎样编写socket套接字
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- umount 强制卸载
umount -lf /mnt 强制卸载文件 -f Force unmount (in case of an unreachable NFS system). (Requires kern ...
- GridView截取某一列字符串的长度
Gridview中,如果你的某一列字符串的长度过长,不做处理的话.那么将显示的奇丑无比, 可以采取设置样式,将其显示为定长,可以在点击查看的时候,在另一个页面对其进行显示 首先在前台设置样式 < ...
- chrome 如何利用快捷键将光标移动到地址栏
Windows: Ctrl + L 或 Alt + D 或 F6 Mac: Command + LLinux: Ctrl + L
- 关于Cocos2d-x对象的定义和创建
游戏可以包含很多个场景,每个场景又包含很多的层,每个层又包含很多的节点,这些节点,层,场景都可以看成一个一个的对象,我们把每一个彼此不同但又是同类型的对象归为一个类,为它创建一个单独的类,这个类有这些 ...
- Convolution Network及其变种(反卷积、扩展卷积、因果卷积、图卷积)
今天,主要和大家分享一下最近研究的卷积网络和它的一些变种. 首先,介绍一下基础的卷积网络. 通过PPT上的这个经典的动态图片可以很好的理解卷积的过程.图中蓝色的大矩阵是我们的输入,黄色的小矩阵是卷积核 ...
- e669. 绘制缓冲图像
To draw on a buffered image, create a graphics context on the buffered image. // Create a graphics c ...
- 【转载】C#进阶系列——动态Lamada
前言:在DDD系列文章里面,我们在后台仓储里面封装了传递Lamada表达式的通用方法,类似这样: public virtual IQueryable<TEntity> Find(Expre ...