泛型的几种类型以及初识webform

今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧。首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法;最后简单的认识了webform,实现了一个简单的功能。

一.泛型

定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化。可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念。C#中提供了五种泛型,类,结构,接口,委托和方法。下面举例说明可能更容易理解,

class MyStack<T>
    {
        T[] statkArray;
        int stackPointer = 0;
        const int MaxStack = 10;
        bool IsStackFull { get { return stackPointer < MaxStack; } }
        bool IsStackEmpty { get { return stackPointer <= 0; } }
        public void Push(T x)
        {
            if (!IsStackFull)
            {
                statkArray[stackPointer++] = x;
            }
        }
        public T Pop()
        {
            return(!IsStackEmpty)?statkArray[--stackPointer]:statkArray[0];
        }
        public void Print()
        {
            for (int i = stackPointer-1; i>=0 ; 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(3);
            stackint.Push(5);
            stackint.Push(7);
            stackint.Push(9);

            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(5));
            Console.WriteLine(trivString.returnIt("张三"));
            Console.ReadKey();
        }
    }

这个小例子看完很容易理解吧,嘿嘿···

四. 枚举器迭代器 :

在这里说的就是foreach有两个方法IEnumerable()与GetEnumerable(),这个简单了解下就好啦,不过foreach要学会用额。

class Program
    {
        static void Main(string[] args)
        {
            int[] arr1 = {10,12,23,15 };
            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) / 3;
        }
    }
class Program
    {
        static void Main(string[] args)
        {
          //  object o = new object();
          //Console.WriteLine(o.MyObjectMethod("我是我"));
          MyData date = new MyData(1,2,3);
          Console.WriteLine(date.MyDataMethod(11, 12, 13));
          Console.ReadKey();
        }
    }

这是一个简单的扩展方法的例子。

七.用webform实现加减乘除的功能。

页面:

后台代码:

 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 = 0;
                switch (comb)
                {
                    case "+": resoult = num1 + num2;
                        break;
                    case "-": resoult = num1 - num2;
                        break;
                    case "*": resoult = num1 * num2;
                        break;
                    case "/":
                        if (num2 != 0)
                        {
                            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天,感觉还不错,开始初识写些简单的程序啦。

时间: 2024-08-02 02:50:16

泛型的几种类型以及初识webform的相关文章

协变、逆变与不变:数组、泛型、与返回类型

转自:http://blog.csdn.net/yi_Afly/article/details/52071260 1. 前言 之前几篇博文,有些地方涉及到了协变性.逆变性与不变性在Java中的表现,所以这篇博文将重点记录这方面的内容,并辅以JDK源码中的一些实例,加以说明. 2. 定义 这里讨论的协变.逆变与不变都是编程语言中的概念.下面介绍定义: 若类A是类B的子类,则记作A ≦ B.设有变换f(),若: 当A ≦ B时,有f(A)≦ f(B),则称变换f()具有协变性. 当A ≦ B时,有f

陈松松:制作视频优先选择这5种类型,总有一个适合你

这是我写的第88篇原创视频营销文章 陈松松,6年视频营销实战经验 万事开头难! 就看谁先能挺住! 很多朋友发现制作视频也有很多类型,不知道选择哪种最适合自己,今天我就跟大家详细分享下,当你学习之后,你根据自己的情况去选择和深入学习,也相当于给了你一个参考方向: 第一种:套视频模板 难度系数:三星 只需要修改文字.替换掉自己的图片,一般这种模板类的视频在10秒-2分钟左右,只要你的视频模板多,都可以制作出非常多的视频. 虽然套视频模板的视频非常简单,任何没有基础的人都可以操作,你用哪种视频软件的模

swift中变量的几种类型

swift中变量分为 optional,non-optional 以及 implicitly unwrapped optional 这几种类型 var nullableProperty : AnyObject? // optional var nonNullProperty : AnyObject // non-optional var unannotatedProperty : AnyObject! // implicitly unwrapped optional 其中,optional (如

C#中方法的参数的四种类型

C#中方法的参数有四种类型: 1. 值参数类型  (不加任何修饰符,是默认的类型) 2. 引用型参数  (以ref 修饰符声明) 3. 输出型参数  (以out 修饰符声明) 4. 数组型参数  (以params 修饰符声明) =================================================== 1. 值传递: 值类型是方法默认的参数类型,采用的是值拷贝的方式.也就是说,如果使用的是值类型,则可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值.使用

正则表达式中原子的5种类型

原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子.原子是由所有那些未显示指定为元字符的打印和非打印字符组成,所以在这里将其详细划分为五类进行介绍. ①普通字符作为原子 普通字符是编写正则表达式时最常见的原子了,包括所有的大写和小写字母字符.所有数字等.例如,a——z.A——Z.0——9. ’/5/’        –用于匹配字符串中是否有5这个字符出现 ’/php/’      –用于匹配字符串中是否有PHP字符串出现 ②一些特殊字符和元字符作为原子 任何一个符号都可以作为原

Atitit 3种类型的公司:运营驱动型;产品驱动型; 技术驱动型。

Atitit  3种类型的公司:运营驱动型:产品驱动型: 技术驱动型. 领导驱动,产品驱动,运营驱动还是工程师驱动 3种类型的公司: 一种是运营驱动型: 一种是产品驱动型: 一种技术驱动型. 运营驱动型基本上是运营和销售.运营不是运营你的产品也不是运营你的业务,是运营人.运营用户.产品驱动型专注于产品的提升,用户的体验.技术驱动型,通过技术支撑大规模的运营.技术是为了支撑用户的体验,技术驱动系统更不用说,技术就是核心. 运营驱动最大的问题是没有安全感的,这也是为什么阿里巴巴要跟苏宁绑在一块.阿里

四种类型的文法总结

这是有关编译原理的. 乔姆斯基体系是计算机科学中刻画形式文法表达能力的一个分类谱系,是由诺姆·乔姆斯基于1956年提出的.它包括四个层次: 0-型文法(无限制文法或短语结构文法)包括所有的文法.该类型的文法能够产生所有可被图灵机识别的语言.可被图灵机识别的语言是指能够使图灵机停机的字串,这类语言又被称为递归可枚举语言.注意递归可枚举语言与递归语言的区别,后者是前者的一个真子集,是能够被一个总停机的图灵机判定的语言. 1-型文法(上下文相关文法)生成上下文相关语言.这种文法的产生式规则取如 αAβ

HTML之DocType的几种类型 -转载

HTML之DocType的几种类型转载 doctype类型详细doctype的几种类型html之doctype 分类: 前端文摘  在默认情况下,FF和IE的解释标准是不一样的,也就是说,如果一个网页没有声明DOCTYPE,它就会以默认的DOCTYPE解释下面的HTML.在同一种标准下,不同浏览器的解释模型都有所差异,如果声明标准不同,不用我说,您自己想就可以了.学习网页标准,浏览器兼容,从哪里开始您自己决定,但是,请认识DOCTYPE: 一.什么是DOCTYPE DOCTYPE是Documen

C++ 中的三种类型

C++中一共三种类型 1.C++内置类型,2.1节中讲到的int.double.bool等就是基本的内置类型(低级数据类型): 2.C++还定义了一个内容丰富的抽象数据类型标准库,其中重要的如string.vector,数组和指针等(更高级的抽象数据类型): 3.第三种就是自定义的类类型,前面说过C++ 设计的焦点就是使所定义的类类型的行为可以像内置类型一样自然.