自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(0)
  • 资源 (95)
  • 收藏
  • 关注

空空如也

dotnet-sdk-2.2.401-win-x64.exe

dotnet-sdk-2.2.401-win-x64.exe

2019-08-31

aspnetcore-runtime-2.2.6-win-x64.exe

aspnetcore-runtime-2.2.6-win-x64.exe

2019-08-31

webfrom-后台输出提示信息-Pub_Function.Message_Box.Show(thi.pdf

Pub_Function.Message_Box.Show(this.Page, ex.Message); this.ClientScript.RegisterStartupScript(this.GetType(), "", "[removed]alert('Save Success!');[removed]='../ShipManage/InvChkTime_Set.aspx';[removed]");

2019-08-21

DataTable 手动创建数据源 newdtb.pdf

private void Bind_List2() { DataTable newdtb = new DataTable(); newdtb.Columns.Add("Id", typeof(int)); newdtb.Columns.Add("trade", typeof(string)); newdtb.Columns.Add("week", typeof(string)); newdtb.Columns.Add("ampm", typeof(string)); newdtb.Columns.Add("check_date", typeof(string)); newdtb.Columns.Add("update_user", typeof(string)); newdtb.Columns.Add("update_date", typeof(string)); newdtb.Columns["Id"].AutoIncrement = true; for (int i = 1; i < 3; i++) {

2019-08-21

DataTable.Select.pdf

private void Sync_Split_Sub() { DataView dv_split = (DataView)Session["dv_split"]; dv_split.Sort = "item"; DataView dv_split_temp_sort = (DataView)Session["dv_split"]; dv_split_temp_sort.Sort = "item"; DataTable dt = dv_split.ToTable(); foreach (DataGridItem item in this.DataGrid_Split.Items) { Label lb_item_s=(Label)item.FindControl("lb_item_s"); dv_split_temp_sort.RowFilter = "item like '%" + lb_item_s.Text + "%' ";

2019-08-21

C# CheckBox 后台获取要删除的id值.pdf

protected void btnDel_Click(object sender, System.EventArgs e) { ArrayList list = new ArrayList(); CheckBox chk; foreach(DataGridItem it in DataGrid1.Items) { chk = (CheckBox)it.Cells[0].Controls[1]; if(chk.Checked) list.Add(it.Cells[1].Text); }

2019-08-21

C# GridView 后台设置列的可见性.pdf

private void HideColoum() { if (this.ddl_DataType.SelectedValue == "CKD" && this.ddl_country.SelectedValue == "Brazil") { // type country family PN code PN描述 Manufacturer Address Country of Origin 导入时间 导入人 更新时间 更新人 this.MyView2.Columns[4].Visible = false; // this.MyView2.Columns[5].Visible = false; this.MyView2.Columns[11].Visible = false; this.MyView2.Columns[12].Visible = false; this.MyView2.Columns[13].Visible = false; } if (this.ddl_DataType.SelectedValue == "SKD" && this.ddl_country.SelectedValue == "Brazil") { // type country customer CU Ref PN code PN描述 Manufacturer Address Country of Origin DAP unit price 导入时间 导入人 更新时间 更新人 // this.MyView2.Columns[3].Visible = false; this.MyView2.Columns[12].Visible = false; this.MyView2.Columns[13].Visible = false; } if (this.ddl_DataType.SelectedValue == "SKD" && this.ddl_country.SelectedValue == "Argentina") { // type country customer CU Ref PN code PN描述 Country of Origin FOB Price CIP Price 导入时间 导入人 更新时间 更新人 // this.MyView2.Columns[3].Visible = false; this.MyView2.Columns[8].Visible = false; this.MyView2.Columns[9].Visible = false; this.MyView2.Columns[10].Visible = false; this.MyView2.Columns[11].Visible = false; } }

2019-08-21

C# dt拼接成html的table以及有合计.pdf

StringBuilder Content = new StringBuilder(); Content.Append("Dear Financial Team,"); Content.Append("<br><br>"); Content.Append("Pls release SO as soon as possible. Any blocking point please highlight timely. Thanks"); TCL.Common.DB_export dbExprot = new TCL.Common.DB_export(); string getMainContent = dbExprot.GetDataTableToHtml(dt); Content.Append(getMainContent); <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> &lt;html &lt;head runat="server"> &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt; &lt;title&gt;&lt;/title> &lt;/head&gt; &lt;body&gt; &lt;form id="form1" runat="server"&gt; <div> <table cellspacing="0" width='100%' bordercolordark="white" cellpadding="0" align="center" bordercolorlight="#cccccc" border="1">

2019-08-21

C# 列表的下拉框联动.pdf

<asp:TemplateColumn HeaderText="Plant" HeaderStyle-HorizontalAlign="center"> <ItemStyle CssClass="dxgv"></ItemStyle> <ItemTemplate> <asp:Label ID="lb_week_p" runat="server" Text='<%# DataBinder.Eval&#40;Container, "DataItem.PLANTKEY"&#41; %>'> </asp:Label> </ItemTemplate> <FooterTemplate> <font face="宋体"></font> <asp:DropDownList ID="ddl_week_p" runat="server" Width="100px" AutoPostBack="true"> <asp:ListItem Selected="True" Value="">----</asp:ListItem> </asp:DropDownList> </FooterTemplate> <EditItemTemplate> <asp:DropDownList ID="ddl_e_week_p" ToolTip='<%# DataBinder.Eval&#40;Container, "DataItem.PLANTKey"&#41; %>' OnSelectedIndexChanged="ddl_e_week_p_SelectedIndexChanged" AutoPostBack="true"runat="server" Width="100px"> </asp:DropDownList> <asp:Label ID="lb_week_p_edit" Visible="false" runat="server" Text='<%# DataBinder.Eval&#40;Container, "DataItem.PLANTKEY"&#41; %>'></asp:Label> </EditItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="Storage Location" HeaderStyle-HorizontalAlign="center"> <ItemStyle CssClass="dxgv"></ItemStyle> <ItemTemplate> <asp:Label ID="lb_week_s" runat="server" Text='<%# DataBinder.Eval&#40;Container, "DataItem.STORAGE_LOCATIONKEY"&#41; %>'> </asp:Label> </ItemTemplate> <FooterTemplate> <font face="宋体"></font> <asp:DropDownList ID="ddl_week_s" runat="server" Width="90px"> <asp:ListItem Selected="True" Value="">----</asp:ListItem> </asp:DropDownList> </FooterTemplate> <EditItemTemplate> <asp:DropDownList ID="ddl_e_week_s" ToolTip='<%# DataBinder.Eval&#40;Container, "DataItem.STORAGE_LOCATIONKey"&#41; %>' runat="server" Width="90px"> </asp:DropDownList> <asp:Label ID="lb_week_s_edit" Visible="false" runat="server" Text='<%# DataBinder.Eval&#40;Container, "DataItem.STORAGE_LOCATIONKEY"&#41; %>'></asp:Label> </EditItemTemplate> </asp:TemplateColumn> protected void ddl_week_p_SelectedIndexChanged(object sender, EventArgs e) { DropDownList item = (DropDownList)((Control)sender).Parent.Parent.FindControl("ddl_week_s"); item.DataTextField = "txt";

2019-08-21

DataTable 导出excel 更新列名或者删除部分列.pdf

DataView dataList = saBatteryHelper.GetSaBatteryList(condition, "PAGE", Int32.Parse(string.IsNullOrEmpty(Imagebutton2.ToolTip) ? "0" : Imagebutton2.ToolTip), this.dg_detail.PageSize, ref total_page, ref total_rec); if (dataList.Table.Columns.Contains("ROW_ID")) dataList.Table.Columns.Remove("ROW_ID"); if (dataList.Table.Columns.Contains("LAST_UPDATED_BY")) dataList.Table.Columns.Remove("LAST_UPDATED_BY"); if (dataList.Table.Columns.Contains("LAST_UPDATE_DATE")) dataList.Table.Columns.Remove("LAST_UPDATE_DATE"); if (dataList.Table.Columns.Contains("CREATED_BY")) dataList.Table.Columns.Remove("CREATED_BY"); if (dataList.Table.Columns.Contains("RELATIONSHIPID")) dataList.Table.Columns["RELATIONSHIPID"].ColumnName = "SA";

2019-08-21

C# GridView 后台跨行跨列.pdf

private void GroupColNEW(GridView gridView, int cols) { if (gridView.Rows.Count < 1 || cols > gridView.Rows[0].Cells.Count - 1) { return; } TableCell oldTc = gridView.Rows[0].Cells[cols]; //SO LINE TableCell oldTc12 = gridView.Rows[0].Cells[13]; //No Cust PO TableCell oldTc17 = gridView.Rows[0].Cells[18]; // //TableCell oldTc73 = gridView.Rows[0].Cells[72];

2019-08-21

C# id in.pdf

private bool FindSelectedTable(ref System.Data.DataTable table) { List<string> ids = new List<string>(); for (int i = 0; i < this.myDataGrid_d.Items.Count; i++) { if (((CheckBox)myDataGrid_d.Items[i].FindControl("cb_choice")).Checked) { DataGridItem item = myDataGrid_d.Items[i]; ids.Add((item.FindControl("lb_id") as Label).Text); } } if (ids.Count == 0) { ShowMessage("请选择数据行!"); return false; } string idsString = string.Join(",", ids.ToArray()); table.DefaultView.RowFilter = "ID in (" + idsString + ")"; table = table.DefaultView.ToTable(); return true; }

2019-08-21

webfrom- ListBox 控件的使用.pdf

webfrom- ListBox 控件的使用.pdf

2019-08-21

C# EmptyDataTemplate 列表默认展示表头.pdf

<EmptyDataTemplate> <table cellspacing="0" cellpadding="0" border="1" <tr class="gridhead_sale"> <th scope="col" <th scope="col" <th scope="col" <th scope="col" <th scope="col" <th scope="col" <th scope="col" </tr> </table> </EmptyDataTemplate> <td class="td_button" 38px" valign="middle" align="left" colspan="2"> <asp:GridView ID="GridView1" runat="server" GridLines="Vertical" BorderColor="white" Width="100%" AllowSorting="true" AutoGenerateColumns="false" AllowPaging="True"> <SelectedRowStyle CssClass="gridselected" /> <EditRowStyle CssClass="gridedit" /> <AlternatingRowStyle CssClass="alteritem_sale" />

2019-08-21

webfrom-前台加载后台方法 --# --.pdf

<asp:TemplateField HeaderText="中港交仓POD"> <ItemTemplate> <asp:ImageButton ID="imgPod" runat="server" ImageUrl="~/Images/goback.gif" ToolTip="下载" Visible='<%# IsPod(DataBinder.Eval&#40;Container, "DataItem.ISHKPOD"&#41;) %>' /> </ItemTemplate> </asp:TemplateField> /// <summary> /// 文件回形针 /// </summary> /// <param name="value"></param> /// <returns></returns> public bool IsPod(object value) { if (Convert.ToString(value) == "Y") { return true; } else { return false; } } protected void MyDataGrid_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) {

2019-08-21

DataTable 数据源加载之后列表加载之前重新处理数据.pdf

private DataTable Optimization_DataTable(DataView dv) { DataTable dt = dv.Table.Clone(); if (dv.Table.Rows.Count >= 1) { for (int i = 0; i < dv.Table.Rows.Count; i++) { DataRow dr_1 = dt.NewRow(); string[] str_To_end_customer = dv.Table.Rows[i]["To_end_customer"].ToString().Split(','); string[] str_HK10_FR10 = dv.Table.Rows[i]["hk_invoice"].ToString().Split(','); dr_1["status"] = dv.Table.Rows[i]["status"]; dr_1["country"] = dv.Table.Rows[i]["country"]; //dr_1["qty"] = dv.Table.Rows[i]["qty"];

2019-08-21

DataTable 重新设置表格列的顺序以及列的名称.pdf

dt.Columns["create_by"].SetOrdinal(0); dt.Columns["create_by"].ColumnName = "OP"; dt.Columns["hk_invoice"].SetOrdinal(1); dt.Columns["hk_invoice"].ColumnName = "HK10->FR10"; dt.Columns["To_end_customer"].SetOrdinal(2);

2019-08-21

webfrom-逗号分隔然后删除最后一个逗号.pdf

CheckBox chk; string strArray = ""; string itemList = ""; int num = 0; foreach (DataGridItem it in MyDataGrid.Items) { chk = (CheckBox)it.Cells[0].Controls[1]; if (chk.Checked) { strArray += it.Cells[1].Text + ";"; itemList += it.Cells[9].Text + ","; num++; } } if (num == 0) { lblMsg.Text = "请选择合并记录"; return; } itemList += ")"; itemList = itemList.Replace(",)",string.Empty);

2019-08-21

webfrom-切换单选框和复选框.pdf

private void Datagrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { if (this.rb_type.SelectedIndex == 0)//批量录入 { e.Item.Cells[2].Visible = false; } else e.Item.Cells[1].Visible = false; } <asp:BoundColumn Visible="False" DataField="line_id"></asp:BoundColumn> <asp:TemplateColumn HeaderText="选择"> <ItemTemplate> &lt;input id="rb_line" type="radio" value='&lt;%# DataBinder.Eval&#40;Container.DataItem, "line_id"&#41; %>' name="RadioName"> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="选择"> <ItemTemplate> <asp:CheckBox ID="id" runat="server"></asp:CheckBox> </ItemTemplate> </asp:TemplateColumn>

2019-08-21

webfrom-父页面调用子页面的方面,刷新列表.pdf

Response.Write("[removed]alert&#40;'更新成功!'&#41;[removed]"); Response.Write("[removed]window.close();[removed]"); Response.Write("[removed] window.opener.getInfo();[removed]"); function getInfo() { document.getElementById("TclButton1").click(); }

2019-08-21

webfrom- 遍历html生成table.pdf

<table border="1" cellpadding="0" cellspacing="0" width="80%"> <tr> <td class="category" align="center"> 序号 </td> <td class="category" align="center"> 业务类型 </td> <td class="category" align="center"> 业务编码 </td> <td class="category" align="center"> 满板数量 </td> <td class="category" align="center"> 主料编码 </td> <td class="category" align="center"> 维护人员 </td> <td class="category" align="center"> 维护时间 </td> <td class="category" align="center"> 编辑 </td> </tr> <% for (int i = 0; i < _dt.Rows.Count; i++) { %> <tr> <td align="center"> <%=i+1%> </td> <td> <%=_dt.Rows[i]["TYPE_NAME"].ToString()%> </td> <td> <%=_dt.Rows[i]["TYPE_CODE"].ToString()%> </td> <td align="center"> <%=_dt.Rows[i]["BOX_MAX_AMOUNT"].ToString()%> </td> <td> <%=_dt.Rows[i]["PO_NO"].ToString()%> </td> <td> <%=_dt.Rows[i]["LAST_UPDATED_BY"].ToString()%> </td> <td> <%=_dt.Rows[i]["LAST_UPDATE_DATE"].ToString()%> </td> <td align="center"> <a Blue" </td> </tr> <% }%> </table>

2019-08-21

webfrom-列表文本内容自动换行 word-break-keep-all;word-wrap-n.pdf

<asp:TemplateColumn HeaderText="OP CREATE USER" HeaderStyle-HorizontalAlign="center"> &lt;HeaderStyle HorizontalAlign="Center"&gt;&lt;/HeaderStyle> <ItemStyle CssClass="dxgv"></ItemStyle> <ItemTemplate> <div "><asp:Label ID="lb_op_create_user" runat="server" Text='<%# DataBinder.Eval&#40;Container, "DataItem.op_create_user"&#41; %>'> </asp:Label></div> </ItemTemplate> </asp:TemplateColumn> myDataGrid_d.Attributes.Add("style", "word-break:keep-all;word-wrap:normal");

2019-08-21

00:asp-DataGrid 表头跨行跨列.pdf

tcl[0].Text="车间&lt;/th&gt;&lt;th rowspan=3&gt;批量&lt;th colspan=16 scope=col valign=middle&gt;当班生产状况&lt;/th&gt;&lt;th colspan=11 scope=col valign=middle&gt;状态机&lt;/th&gt;&lt;th scope=col valign=middle rowspan=3&gt;待投数&lt;/th&gt;&lt;th scope=col valign=middle rowspan=3&gt;明细&lt;/th&gt;&lt;/tr&gt;&lt;tr class=tttable bgColor=#FFFFC0&gt;&lt;td align=center colspan=4 valign=middle&gt;"+ "投入数</td><td colspan=4 align=center valign=middle>完成机头数</td><td colspan=4 align=center valign=middle>包装数</td><td colspan=4 align=center valign=middle>入库数</td><td rowspan=2>待入库</td><td rowspan=2>待包装</td><td rowspan=2>成品待处理</td><td rowspan=2>待测试</td><td rowspan=2>待修理</td><td rowspan=2>外借</td><td rowspan=2>在老化</td><td rowspan=2>待老化</td><td rowspan=2>老化后待复测</td><td rowspan=2>机头待处理</td><td rowspan=2>待下载</td>"+ "</tr><tr class=tttable bgColor=#FFFFC0><td align=center>当日</td><td align=center>上次</td><td align=center>累计</td><td align=center>汇总</td><td align=center>当日</td><td align=center>上次</td><td align=center>累计</td><td align=center>汇总</td><td align=center>当日</td><td align=center>上次</td><td align=center>累计</td><td align=center>汇总</td><td align=center>当日</td><td align=center>上次</td><td align=center>累计</td><td align=center>汇总</td></tr>";

2019-08-21

webfrom:BoundField.pdf

GridView 只需要展示则BoundField ItemTemplate则可以在行里面展示任何控件 <asp:BoundField DataField="mainclass_code" HeaderText="大类编号" /> <asp:TemplateField HeaderText="小类名"> <ItemTemplate> <asp:TextBox ID="icode" runat="server" Text='<%# DataBinder.Eval&#40;Container.DataItem, "subclass_name"&#41; %>' /> </ItemTemplate> </asp:TemplateField>

2019-08-21

面试要回答的委托.pdf

一、 委托 设想,如果我们写了一个厨师做菜方法用来做菜,里面有 拿菜、切菜、配菜、炒菜 四个环节,但编写此方法代码的人想让 配菜 这个环节让调用方法的人实现,换句话说,就是想在方法被调用时接收 代码 作为参数,在方法中执行这段传进来的代码。 但,怎么为一个方法传 代码 进来呢?当然大家想到了传递接口方式来实现,咱先不讨论接口,因为微软为我们提供了一个叫做 【委托】 的类型。 (一)、委托基础: 1. 先看看代码: (1).定一个方法:void SayHi(string name){Console.WriteLine(“Hi~”+name+”! ” );} (2).声明一种委托类型:delegate void DGSayHi(string uName); (3).创建委托类型对象:DGSayHi dgObj = new DGSayHi(SayHi);//构造函数中传入了方法 (4).执行委托: dgObj(“JamesZou”); //调用委托(奇怪:对象加括号 的方式调用?后面解释。) 输出:Hi~JamesZou! 2. 什么是委托? (1)概念:“C# 中的委托类似于 C 或 C++ 中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后调用该委托对象就可以执行委托对象内方法引用指向的方法,而不必在编译时知道将调用哪个方法(如参数为委托类型的方法,也就是提供了为程序回调指定方法的机制)。”-- 引自MSDN

2019-08-21

01: 委托 事件 入门.pdf

C.委托语法糖 (1).注意到上面有3个地方我们都觉得“奇怪”: a.调用委托对象dgObj(“JamesZou”); b.向委托注册方法 dgObj+=DaZhaoHu; c.将方法作为参数 DoTestDelegateFun(SayHi); 这些用法其实都是FW为我们提供的简便语法(它们有个可爱的名字:语法糖),在编译时由编译器转成完整的代码: a. dgObj.Invoke(“JamesZou”); b. dgObj = (DGSayHi) Delegate.Combine(dgObj, new DGSayHi(this.DaZhaoHu)); //Combine方法将第二个参数,添加到dgObj中,并返回委托对象。 c. this.DoTestDelegateFun(new DGSayHi(this.SayHi)); Delegate类、Invoke方法、Combine方法是哪来的呢? (二)、委托原理 1.delegate 关键字 (1).概念:delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。 (2)编译后生成的的中间代码。 请大家思考一下,关键字是类型吗?不是。那编译器遇到这个关键字做了什么事情?借助【IL反汇编程序】 我们来看一看: a.开始-程序-如图:

2019-08-21

带返回值的委托,只可以接受到第二个.pdf

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { DGReturn dgreturn = sayhi; dgreturn += sayhhhhhi; string str= dgreturn("return"); //当两个返回值的调用就会只接收到第二个 //lklklklk MessageBox.Show(str); } string sayhi(string str) { return "skskks" + str; } string sayhhhhhi(string str) { return "lklklklk" + str; } } public delegate string DGReturn (string str); }

2019-08-21

委托可以接受多个参数.pdf

private void Form1_Load(object sender, EventArgs e) { DGSayHi dg = new DGSayHi(sayHi); dg += sayHI; List<string> list = new List<string>(); dg("小白", list); foreach (string item in list) { MessageBox.Show(item); } } void sayHi(string str, List<string> listRes) { listRes.Add("sayHi第一个" + str); } void sayHI(string str, List<string> listRes) { listRes.Add("sayHi第二个" + str); } } public delegate void DGSayHi(string str,List<string> listRes); }

2019-08-21

事件 的用法.pdf

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApplication7 { public class btnClass:System.Windows.Forms.Button { public btnClass() { base.Click += btnClass_Click; } int clickTimes = 1; public event DGTripleClick dgTriple; void btnClass_Click(object sender, EventArgs e) { if (clickTimes < 3) { clickTimes++; } else { if (dgTriple != null) { dgTriple(); } clickTimes = 1; } } } public delegate void DGTripleClick(); } public Form1() { InitializeComponent(); this.btnClass1.dgTriple += TripleClick; } public void TripleClick() { MessageBox.Show("3333"); }

2019-08-21

委托各种写法以及详细教程

委托各种写法以及详细教程 //1.创建委托类 //2.实例化类的对象 注意:实例化的时候 必须通过构造函数 传入一个方法 DGSayHi dgSayHi = new DGSayHi(SayHi); //2.1向委托中 添加方法 dgSayHi += SayHi2;//编译后:dgSayHi = (DGSayHi) Delegate.Combine(dgSayHi, new DGSayHi(this.SayHi2)); dgSayHi = (DGSayHi)Delegate.Combine(dgSayHi, new DGSayHi(this.SayHi2)); //语法糖 dgSayHi = (DGSayHi)Delegate.Combine(dgSayHi, new DGSayHi(this.SayHi2)); dgSayHi += SayHi2; dgSayHi = (DGSayHi)Delegate.Remove(dgSayHi, new DGSayHi(this.SayHi2)); dgSayHi = dgSayHi - SayHi2; //3.调用委托的时候,一次性执行委托中所有的方法 dgSayHi();//编译后:dgSayHi.Invoke(); dgSayHi.Invoke(); dgSayHi.Invoke(); MessageBox.Show("删除一个方法后:"); //4.从委托中 删除 指定的方法 dgSayHi -= SayHi;//编译后:dgSayHi = (DGSayHi) Delegate.Remove(dgSayHi, new DGSayHi(this.SayHi)); dgSayHi();

2019-08-21

事件.pdf(委托和事件有什么不同)

/// /// 委托和事件有什么不同 /// 1:关键字不同,委托是关键字delegate 事件是event /// 2:定义不同:委托是有参数的,事件是没参数的,不需要写() /// 3:绑定不同:委托是可以用=号把方法名称直接赋值,事件是要用+=的方式赋值 /// 4: 方法不同:委托触发的方法参数是自定义的,事件触发的方法参数是固定的 object sender 和 EventArgs /// /// Sender就是触发这个事件的对象 PlayMusic t = sender as PlayMusic; /// EventArgs是执行这个事件所需要的数据源, e里面带有参数可使用 /// /// 委托和事件有什么相同 /// 1:多播委托: 都是要+=或者-=的方式赋值 /// /// 事件的作用 /// 事件的作用于委托变量一样,只是功能上委托变了有更多的限制 /// 只能通过+=或者-=的方式,只能在类的内部调用事件 ///

2019-08-21

反射5大对象

对象为Assembly 可以获取到程序集文件 对象Type 可以获取到当前程序集的所有类文件 对象MethodInfo 可以获得类的方法的对象 对象PropertyInfo可以获得类的字段的对象 对象FieldInfo 可以获得类的属性的对象 对象EventInfo 可以获得类的事件的对象

2019-08-21

Methodinfo属性调用静态方法.pdf

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApplication11 { public class Student { public int ID; public string Name { get; set; } public bool Gender; public string ShowLove(string targetName) { return targetName + ", i love u .msg from " + this.Name; } public Student(string name) { this.Name = name; } public static string RunForLove(string targetName) { return "byebey" + targetName; } } }

2019-08-21

反射与接口2

1:拿到plug文件夹的路径(先拿到记事本程序集的路径,在得到记事本程序集同级目录的plug文件夹的路径) //this.GetType().Assembly //1.2获取 插件文件夹 路径 注意:获取的是程序所在的文件夹路径 string strPath = System.IO.Path.GetDirectoryName(curAssembly.Location) + @"\plug\"; 2:判断里面是否有第三方插件程序集 A:(plug文件夹放了第三方插件)根据plug文件夹拿到plug文件夹里面的所有以dll后缀名结束的第三方插件的路径 //1.3获取 插件文件夹 里的 dll 文件路径 string [] dllPaths = System.IO.Directory.GetFiles(strPath, "*.dll"); B:根据这个第三方插件生成类的对象 //*准备一个 插件接口 类型对象(用于判断记事本软件提供的接口标准是否与第三方公司写接口一致)

2019-08-21

反射与接口

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第三方公司插件 { using 记事本公司提供的插件标准; public class PlugOne:IPlug { public string PlugName { get { return "全部变成大写"; } } public string ProcessText(string strOri) { return strOri.ToUpper(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第三方公司插件 { using 记事本公司提供的插件标准; public class PlugTwo:IPlug { public string PlugName { get { return "全部变成小写"; } } public string ProcessText(string strOri) { return strOri.ToLower(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 记事本公司提供的插件标准 { public interface IPlug { string ProcessText(string strOri); string PlugName { get; } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 记事本主程序 { using System.Reflection; using System.IO; using 记事本公司提供的插件标准; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //获取正在运行的程序集 Assembly ass = Assembly.GetExecutingAssembly(); //获取程序集的4种方法 //Assembly ass1 = this.GetType().Assembly; //Assembly[] asses = AppDomain.CurrentDomain.GetAssemblies();

2019-08-21

反射PPT教程

string url = context.Request.Url;//index.aspx //2 得到不带有扩展名的文件名称 string preStr = System.IO.Path.GetFileNameWithoutExtension(url); //3 定义要反射类的完全限定名称 string fullName = "myIIS.Pages." + preStr; //4 反射创建 index类的对象 IHttpHandler handler = this.GetType().Assembly.CreateInstance(fullName) as IHttpHandler; //4.将 页面对象 存入 上下文中 context.MapHandler = handler;

2019-08-21

反射在ef中的应用.pdf

#region 3.2 根据指定条件 修改 +int ModifyBy(Expression<Func> whereLambda) /// /// 2.3 根据指定条件 修改 /// /// 条件表达式 /// 要修改的属性名 /// 属性要修改的值 /// public int ModifyBy(Expression<Func> whereLambda, string[] propertyNames, object[] perpertyValues) { //1.查询要修改的对象集合 var list = db.Set().Where(whereLambda).ToList(); //2.获取 要修改对象 的类型属性 Type t = typeof(T); //3.循环 要修改的 实体对象,并根据 要修改的属性名 修改对象对应的属性值 foreach (var item in list) { //循环 要修改的属性 名称, 并 反射取出 t 中的 属性对象 for (int index = 0; index < propertyNames.Length;index++ ) { //获取要修改的属性名 string pName = propertyNames[index]; //获取属性对象 PropertyInfo pi = t.GetProperty(pName);

2019-08-21

01:详解C#中的反射.pdf

两个现实中的例子: 1、B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况。这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时候就会产生一定的“回音”反射,然后把“回音”进行处理就可以显示出内脏的情况了(我不是医生也不是声学专家,不知说得是否准确^_^)。 2、地球内部结构:地球的内部结构大体可以分为三层:地壳、地幔和地核。地壳是固体,地核是液体,地幔则是半液半固的结构(中学地理的内容,大家还记得吧?)。如何在地球表面不用深入地球内部就知道其内部的构造呢?对,向地球发射“地震波”,“地震波”分两种一种是“横波”,另一种是“纵波”。“横波”只能穿透固体,而“纵波”既可穿透固体又可以穿透液体。通过在地面对纵波和横波的反回情况,我们就可以大体断定地球内部的构造了。 大家注意到这两个例子的共同特点,就是从一个对象的外部去了解对象内部的构造,而且都是利用了波的反射功能。在.NET中的反射也可以实现从对象的外部来了解对象(或程序集)内部结构的功能,哪怕你不知道这个对象(或程序集)是个什么东西,另外.NET中的反射还可以运态创建出对象并执行它其中的方法。 反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了反射,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个对象的类型在编译时还不知道。 反射的用途: (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。 (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。 (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。 (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。 (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。 反射用到的命名空间: System.Reflection System.Type System.Reflection.Assembly 反射用到的主要类: System.Type 类--通过这个类可以访问任何给定数据类型的信息。 System.Reflection.Assembly类--它可以用于访问给定程序集的信息,或者把这个程序集加载到程序中。 System.Type类: System.Type 类对于反射起着核心的作用。但它是一个抽象的基类,Type有与每种数据类型对应的派生类,我们使用这个派生类的对象的方法、字段、属性来查找有关该类型的所有信息。 获取给定类型的Type引用有3种常用方式: ●使用 C# typeof 运算符。 Type t = typeof(string); ●使用对象GetType()方法。 string s = "grayworm"; Type t = s.GetType(); ●还可以调用Type类的静态方法GetType()。 Type t = Type.GetType("System.String"); 上面这三类代码都是获取string类型的Type,在取出string类型的Type引用t后,我们就可以通过t来探测string类型的结构了。 string n = "grayworm"; Type t = n.GetType(); foreach (MemberInfo mi in t.GetMembers()) { Console.WriteLine("{0}/t{1}",mi.MemberType,mi.Name); } Type类的属性: Name 数据类型名 FullName 数据类型的完全限定名(包括命名空间名) Namespace 定义数据类型的命名空间名 IsAbstract 指示该类型是否是抽象类型 IsArray 指示该类型是否是数组 IsClass 指示该类型是否是类 IsEnum 指示该类型是否是枚举 IsInterface 指示该类型是否是接口 IsPublic 指示该类型是否是公有的 IsSealed 指示该类型是否是密封类 IsValueType 指示该类型是否是值类型 Type类的方法: GetConstructor(), GetConstructors():返回ConstructorInfo类型,用于取得该类的构造函数的信息 GetEvent(), GetEvents():返回EventInfo类型,用于取得该类的事件的信息 GetField(), GetFields():返回FieldInfo类型,用于取得该类的字段(成员变量)的信息 GetInterface(), GetInterfaces():返回InterfaceInfo类型,用于取得该类实现的接口的信息 GetMember(), GetMembers():返回MemberInfo类型,用于取得该类的所有成员的信息 GetMethod(), GetMethods():返回MethodInfo类型,用于取得该类的方法的信息 GetProperty(), GetProperties():返回PropertyInfo类型,用于取得该类的属性的信息 可以调用这些成员,其方式是调用Type的InvokeMember()方法,或者调用MethodInfo, PropertyInfo和其他类的Invoke()方法。 查看类中的构造方法: NewClassw nc = new NewClassw(); Type t = nc.GetType(); ConstructorInfo[] ci = t.GetConstructors(); //获取类的所有构造函数 foreach (ConstructorInfo c in ci) //遍历每一个构造函数 { ParameterInfo[] ps = c.GetParameters(); //取出每个构造函数的所有参数 foreach (ParameterInfo pi in ps) //遍历并打印所该构造函数的所有参数 { Console.Write(pi.ParameterType.ToString()+" "+pi.Name+","); } Console.WriteLine(); }

2019-08-21

泛型笔记.pdf

1;继承一个泛型类时,必须为其传递泛型参数 public class Father<K,V> -------整个叫泛型 K,V ----泛型参数 2;定义子类时直接为父类泛型参数赋值 public class Son:Father<K,V> public class Son:Father<int,string> 一个泛型子类继承一个泛型父类时,可以直接为父类的泛型参数赋值 3;定义子类时把子类泛型参数,同时为父类泛型参数赋值 public class Son<W,Y>:Father(W,Y) 一个泛型子类继承一个泛型父类时,子类泛型参数传值给父类泛型参数 Son--Father 4; 定义子类时子类泛型参数给定占位符,同时父类泛型参数可以赋值 public class Son<W,Y>:Father<int,string> 5:一个泛型子类继承一个泛型父类时,父类 的站位符是之前定义好的参数,不可以出现其他占位符 知识点 B:

2019-08-21

2013-01-30 泛型、反射.pdf

一、泛型 为什么要有泛型集合(List<T>,Dictionary<K,V>,LinkedList<T>)? 1.为了避免装箱拆箱; 2.复用集合类里的 代码(算法) List<string> List<int> 1.概念 1.1官方:是一种特殊的【算法重用】机制。允许程序员在代码中将 变量或参数的类型 先用【类型占位符】来代替,等到运行的时候再根据传入的【类】来替换 通俗:类也可以带参数了!但是这个参数必须是 类型!用来在 类的代码中 暂时代替 类的位置,然后会在运行时,被替换。 【例子】: public class MyList<T> { T[] arr; public MyList(T[] arrp) { arr = arrp; } } 2.语法 2.1泛型的运行 当 运行的时候,JIT会帮我们生成泛型类的不同版本,通过如下代码可以验证: //aa是MyList中一个int的静态变量 MyList<string>.aa = 11; MyList<int>.aa = 22; //照理说,同为MyList类的静态变量,应该保存最后一次赋值的 22 //但是输出的时候,确实生成了两个不同的版本 Console.WriteLine(MyList<string>.aa.ToString());//11 Console.WriteLine(MyList<int>.aa.ToString());//22 //由此看出,JIT在运行代码的时候,分别为带不同的 泛型参数 的MyList类生成了不同的版本。 MyList<string>.dd = new Dog(); MyList<string>.dd.age = 11; MyList<int>.dd = new Dog(); MyList<int>.dd.age = 22; Console.WriteLine(MyList<string>.dd.age.ToString());//11 Console.WriteLine(MyList<int>.dd.age.ToString());//22 【问题】为什么JIT在执行的是有要根据泛型类 MyList<T>里的T 来产生不同的 MyList类的版本? 因为 只有当T确定为某种类型的时候,JIT才有可能计算出 当前MyList类的对象在内存中要分配多大的空间。 3.泛型约束 3.1基类约束 public class House<TPet,TPet2> where TPet:Dog //约束 TPet必须是 Dog或Dog的子类 where TPet2:Cat //约束 TPet必须是 Cat或Cat的子类 { TPet pet1; TPet2 pet2; }

2019-08-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除