csharp高级属性定义

合集下载

c#进阶之神奇的CSharp

c#进阶之神奇的CSharp

c#进阶之神奇的CSharpCSharp 简写为c#,是⼀门⾮常年轻⽽⼜有活⼒的语⾔。

CSharp的诞⽣在2000年6⽉微软发布了c#这门新的语⾔。

作为微软公司.NET 平台的主⾓,c#吸收了在他之前诞⽣的语⾔(c/c++、Visual Basic、Delphi、Java)的优点。

也就是说在.NET平台下 c#可以轻易的使⽤⾯向对象的设计和实现出安全⾼效的程序。

发现到现在经过⼗⼏年的发展,.NET 平台发展到了 4.5版本。

提供了各种新的语⾔特征(3.0:lambda,linq等 4.0 :动态语⾔、可选参数和命名参数等)和开发框架( mvc、wcf、wpf、WWF),在其他语⾔中⾮常流⾏的开发框架(spring.framework、nhibernate、ibatis等)都得到了完美移植。

跨平台⽅⾯,借助,可以开发在android、ios⼿机上运⾏的应⽤和⼿游,可以开发并部署在linux服务器上运⾏的⽹站以及其他后台应⽤程序。

曾经的微软帝国现在逐渐以⼀种开放的态度向的开发者⽰以好意,在github上,创建了、、、等开源地址,值得⼀提的是在2015年2⽉.NET Core的执⾏引擎也开源了。

这标志了微软在开源和跨平台⼜向前迈出了⼀步。

CSharp如何运⾏的c#的源代码已cs为后缀的⽂本⽂件,从⽂本⽂件的源代码到可以执⾏的c#经历了两个⾮常重要的编译阶段。

1. 把源代码编译为Microsoft中间语⾔(IL)2.公共语⾔动态库(CLR)把IL编译为平台专⽤的代码由此可以看出 Microsoft(中间语⾔)IL发挥了⾮常⼤的作⽤。

IL是⼀种低级语⾔,总是及时编译的,也称为JIT编译(JIT编译器只编译那⼀部份调⽤的代码,并且编译⼀次之后把本地可执⾏程序储存起来,在下次运⾏的时候直接运⾏本地程序不⽤重新编译。

)不只是c#可以变成中间语⾔,vb、c++也可以编译成中间语⾔,也就是说c#可以轻松和这些可以编译成中间语⾔的⾼级语⾔互调⽤。

Csharp控件详解

Csharp控件详解

Csharp控件详解C#控件一览表前所未有的震撼(太详细了)C#控件及常用设计整理1、窗体1、常用属性(1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。

(2)WindowState属性:用来获取或设置窗体的窗口状态。

取值有三种:Normal(窗体正常显示)、Minimized(窗体以最小化形式显示)和Ma某imized(窗体以最大化形式显示)。

(3)StartPoition属性:用来获取或设置运行时窗体的起始位置。

(4)Te某t属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。

(5)Width属性:用来获取或设置窗体的宽度。

(6)Height属性:用来获取或设置窗体的高度。

(7)Left属性:用来获取或设置窗体的左边缘的某坐标(以像素为单位)。

(8)Top属性:用来获取或设置窗体的上边缘的y坐标(以像素为单位)。

(9)ControlBo某属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。

值为true时将显示控制框,值为fale时不显示控制框。

(10)Ma某imizeBo某属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。

值为true时显示最大化按钮,值为fale时不显示最大化按钮。

(11)MinimizeBo某属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。

值为true时显示最小化按钮,值为fale时不显示最小化按钮。

(12)AcceptButton属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按Enter键时就相当于单击了窗体上的该按钮。

(13)CancelButton属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按Ec键时就相当于单击了窗体上的该按钮。

(14)Modal属性:该属性用来设置窗体是否为有模式显示窗体。

如果有模式地显示该窗体,该属性值为true;否则为fale。

csharp基本概念 -回复

csharp基本概念 -回复

csharp基本概念-回复C#基本概念C#是一种通用的、面向对象的编程语言,由微软公司开发。

它的设计目标是为了使开发人员能够构建出高效可靠的应用程序。

C#基于.NET平台,因此可以在Windows、Linux和macOS等多个操作系统上运行。

本文将围绕C#的基本概念展开,探讨其语法、数据类型、流程控制以及面向对象编程等主题,以帮助读者更好地理解和运用C#。

一、基本语法1. 命名空间(namespace)在C#中,命名空间是用来组织和管理代码的一种方式。

命名空间用来防止命名冲突,也可以让代码更有结构性。

可以使用using关键字导入其他命名空间。

2. 类(class)类是C#中最基本的构建块之一。

类定义了对象的属性和方法。

通过创建类的实例,可以实现对这个类进行操作和访问。

3. 方法(method)方法是指一系列的语句,它们一起完成某个特定的功能。

在C#中,方法必须定义在类中。

4. 变量和数据类型C#支持多种数据类型,可根据需求选择合适的类型来存储数据。

常见的数据类型有整型(int)、浮点型(float)、布尔型(bool)等。

变量是用来存储数据的容器,可以通过给变量赋值来存储相应的数据。

二、数据类型1. 值类型和引用类型在C#中,数据类型可分为值类型和引用类型。

值类型变量直接包含数据的实际值,而引用类型变量存储了对象的引用。

值类型在栈上分配内存,而引用类型在堆上分配内存。

2. 数组(array)数组是一种存储固定大小元素的集合,可以通过索引访问数组中的元素。

在C#中,数组可以是值类型或引用类型。

3. 字符串(string)字符串是C#中的常用数据类型,用于存储多个字符。

C#中的字符串是不可变的,即无法直接修改字符串中的字符。

可以通过使用字符串类的方法和属性来操作字符串。

三、流程控制1. 条件语句C#中的条件语句用于根据特定的条件来执行不同的代码块。

常见的条件语句有if语句、if-else语句和switch语句。

csharpskin 用法

csharpskin 用法

csharpskin 用法
C# Skin是一种用户界面设计工具,用于创建C#(C Sharp)编
程语言的Windows窗体应用程序的外观和样式。

C#是一种由微软开
发的面向对象的编程语言,广泛用于开发Windows应用程序和Web
应用程序。

C# Skin可以帮助开发人员创建具有吸引人外观和用户
友好界面的应用程序,提供了一种简便的方式来自定义控件的外观,包括按钮、文本框、标签等。

使用C# Skin,开发人员可以通过修改控件的外观属性来实现
自定义的界面设计,比如改变按钮的颜色、边框样式、文字样式等。

这使得开发人员可以轻松地创建个性化的应用程序界面,以满足用
户的审美需求和品牌要求。

另外,C# Skin还提供了一些预设的主题和样式,开发人员可
以直接使用这些主题和样式,而无需从头开始设计界面。

这样可以
节省开发时间,并且确保应用程序的外观符合当前的设计趋势。

总的来说,C# Skin是一个用于创建个性化和吸引人的用户界
面的工具,它为C#开发人员提供了丰富的外观定制选项,使他们能
够轻松地打造出令人印象深刻的应用程序界面。

命名规范_C (Sharp)

命名规范_C (Sharp)

命名规范_C(Sharp)1.命名规范a)类【规则1-1】使用Pascal规则命名类名,即首字母要大写。

【规则1-2】使用能够反映类功能的名词或名词短语命名类。

【规则1-3】不要使用“I”、“C”、“_”等特定含义前缀。

【规则1-4】自定义异常类应以Exception结尾。

【规则1-5】文件名要能反映类的内容,最好是和类同名。

b)类字段【规则2-1】用camel规则来命名类成员变量名称,即首单词(或单词缩写)小写。

【规则2-2】类字段变量名前可加“_”前缀。

【规则2-3】坚决禁止在普通变量前加“m_”(这是VC老命名规则)。

c)方法【规则3-1】方法名采用Pascal规则,第一个字符要大写。

【规则3-2】方法名应使用动词或动词短语。

【规则3-3】类中访问修饰符或功能相同的方法应该放在一起,且公共或实现接口的方法在前。

d)属性【规则4-1】使用名词定义属性,属性使用Pascal规则,首字符大写。

【规则4-2】属性和相应字段名称要关联,可以使用“重构”菜单来生成属性。

e)参数【规则5-1】参数采用camel规则命名,且首字符小写。

【规则5-2】使用描述性参数名称,参数名称应当具有最够的说明性。

【规则5-3】不要给参数加匈牙利语类型表示法的前缀。

【规则5-4】检查方法所有输入参数的有效性。

f)常量【规则6-1】只读常量使用Pascal命名规则,即首字母大写。

【规则6-2】枚举名使用Pascal规则命名,枚举成员本质属于常量,命名规则同上。

【规则6-3】枚举值从小到大顺序定义。

【规则6-4】静态字段或属性采用Pascal规则,即首字符大写。

g)接口【规则7-1】接口定义使用Pascal规则,且必须以大写“I”开头。

【规则7-2】接口名称要有意义,中间不要有下划线“_”等字符。

【规则7-3】如果类实现了接口,名称尽量和接口相同,只是省掉“I”字符。

h)事件【规则8-1】委托名称采用Pascal规则,即首字符大写。

CSharp 语言定义文档 5

CSharp 语言定义文档 5

3. 基本概念3.1 应用程序启动具有入口点 (entry point) 的程序集称为应用程序 (application)。

应用程序运行时,将创建新的应用程序域(application domain)。

同一台计算机上可能会同时运行着同一个应用程序的若干个实例,此时,每一个实例都拥有各自的应用程序域。

应用程序域用作应用程序状态的容器,以此隔离应用程序。

应用程序域作为应用程序中和它使用的类库中所定义的类型的容器和边界。

同一个类型若被加载到不同的应用程序域中就成为各自独立的客体,由它们在各自应用程序域中产生的实例亦不可直接共享。

例如,对于这些类型的静态变量,每个应用程序域都有自己的副本,并且这些类型的静态构造函数在每个应用程序域中也要(最多)运行一次。

关于如何处理程序域的创建和销毁,各实现可以按具体情况确定自己的策略或机制。

当执行环境调用指定的方法(称为应用程序的入口点)时发生应用程序启动 (application startup)。

此入口点方法总是被命名为Main,可以具有下列签名之一:static void Main() {...}static void Main(string[] args) {...}static int Main() {...}static int Main(string[] args) {...}如上所示,入口点可以选择返回一个int值。

此返回值用于应用程序终止(第 3.2 节)。

入口点可以包含一个形参(可选)。

该参数可以具有任意名称,但参数的类型必须为string[]。

如果存在形参,执行环境会创建并传递一个包含命令行实参的string[]实参,这些命令行实参是在启动应用程序时指定的。

string[]参数永远不能为 null,但如果没有指定命令行参数,它的长度可以为零。

由于 C# 支持方法重载,因此类或结构可以包含某个方法的多个定义(前提是每个定义有不同的签名)。

但在一个程序内,没有任何类或结构可以包含一个以上的名为Main的方法,因为 Main 的定义限定它只能被用作应用程序的入口点。

Csharp简介

Csharp简介

第一讲C#语言简介§1.1 概述C#(读作“See Sharp”)是一种简单、现代、面向对象且类型安全的编程语言, C# 起源于 C 语言家族。

C# 是面向对象的语言,然而C# 进一步提供了对面向组件(component-oriented) 编程的支持。

C#具有一个统一类型系统(unified type system)。

所有C# 类型(包括诸如int和double之类的基元类型)都继承于一个唯一的根类型:object。

因此,所有类型都共享一组通用操作,并且任何类型的值都能够以一致的方式进行存储、传递和操作。

此外,C# 同时支持用户定义的引用类型和值类型,既允许对象的动态分配,也允许轻量结构的内联存储。

为了确保C# 程序和库能够以兼容的方式逐步演进,C# 的设计中充分强调了版本控制(versioning)。

许多编程语言不太重视这一点,导致采用那些语言编写的程序常常因为其所依赖的库的更新而无法正常工作。

C# 的设计在某些方面直接考虑到版本控制的需要,其中包括单独使用的virtual和override修饰符、方法重载决策规则以及对显式接口成员声明的支持。

§1.2 Hello world按照约定俗成的惯例,我们先从“Hello, World”程序着手介绍这一编程语言。

下面是它的C# 程序:【例1.1】“Hello, World”程序。

程序名称:Hello.csusing System;class Hello{static void Main() {Console.WriteLine("Hello, World");}}C# 源文件的扩展名通常是.cs。

假定“Hello, World”程序存储在文件hello.cs 中,可以使用下面的命令行调用Microsoft C# 编译器编译这个程序:csc hello.cs编译后将产生一个名为hello.exe的可执行程序集。

你必须知道的Csharp的25个基础概念

你必须知道的Csharp的25个基础概念
//public static readonly String strStaticReadonly = "StaticReadonly Changed";
}//5-1-a-s-p-x
}
复制代码
客户端代码:
using System;
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Text;
namespace Example02Lib
{
public class Class1
{
public const String strConst = "Const";
static int Main()
{
string myString;
Console.Write("Enter your message: ");
myString = Console.ReadLine();
return MessageBox(0, myString, "My Message Box", 0);
}
}
}
复制代码
结果:
4.abstract是什么意思?答:abstract修饰符可以用于类、方法、属性、事件和索引指示器(indexer),表示其为抽象成员abstract不可以和static、virtual、override一起使用声明为abstract成员可以不包括实现代码,但只有类中还有未实现的抽象成员,该类就不可以被实例化,通常用于强制继承类必须实现某一成员示例:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#自定义控件属性与行为分类:C#2010-10-08 09:49 1337人阅读评论(1) 收藏举报控件应该定义属性而不是公共字段,因为可视化设计器在属性浏览器中显示属性,而不显示字段。

属性就像智能字段。

属性通常具有带访问函数的专用数据成员,在语法上属性被作为类的字段进行访问。

(虽然属性可以具有不同的访问级别,但此处的讨论将重点放在公共访问这种更加常见的情况上。

属性定义通常由以下两部分组成:1、专用数据成员的定义。

[c-sharp]view plaincopy1.private int number = 0;2、使用属性声明语法对公共属性进行的定义。

[c-sharp]view plaincopy1.//该语法通过 get 和 set 访问函数将专用数据成员和公共属性关联起来。

2.public int MyNumber3.{4.get5.{6.return number;7.}8.set9.{10.number = value;11.}12.}虽然属性定义中通常包含专用数据成员,但这不是必需的。

get 访问器不用访问私有数据成员就可以返回值。

get 方法返回系统时间的属性就属于这种情况。

属性启用数据隐藏,访问器方法隐藏属性的实现。

定义属性时需考虑以下重要的注意事项:1、必须将属性应用于定义的属性。

属性用来指定设计器显示属性的方式。

2、如果改变属性将影响控件的外观显示,请从set 访问器中调用Invalidate 方法(从Control 继承该方法)。

Invalidate 随后调用OnPaint 方法,该方法将重新绘制控件。

为提高效率起见,对Invalidate 的多次调用将产生对OnPaint 的一次调用。

3、 .NET Framework 类库为常见数据类型(如整数、小数、布尔值和其他数据)提供了类型转换器。

类型转换器的目的通常是用来提供字符串到数值的转换(从字符串数据转换为其他数据类型)。

常见数据类型与默认类型转换器(将数值转换为字符串,并将字符串转换为相应数据类型)相关联。

如果定义了自定义(即,非标准)数据类型的属性,则应用的属性必须将类型转换器指定为与该属性相关联。

还可以使用属性使自定义UI 类型编辑器与某个属性相关联。

UI 类型编辑器提供了一个用来编辑属性或数据类型的用户界面。

颜色选择器是UI 类型编辑器的一个示例。

例:首先创建一个名为DrawingMode 的简单枚举。

[c-sharp]view plaincopy1.public enum DrawingMode2.{3.Happy = 0,4.Sad = 1,5.Angry = 26.}接着,向该控件添加MyDrawingMode 属性[c-sharp]view plaincopy1.private DrawingMode myDrawingMode;2.[Browsable(true), Category("Appearance")]3.public DrawingMode MyDrawingMode4.{5.get6.{7.return myDrawingMode;8.}9.set10.{11.myDrawingMode = value;12.SetColors();13.}14.}对SetColors 方法的调用只是根据myDrawingMode 的值设置控件的BackColor 和ForeColor。

向控件添加下面的代码。

[c-sharp]view plaincopy1.private void SetColors()2.{3.switch (myDrawingMode)4.{5.case DrawingMode.Happy:6.this.BackColor = Color.Yellow;7.this.ForeColor = Color.Green;8.break;9.case DrawingMode.Sad:10.this.BackColor = Color.LightSlateGray;11.this.ForeColor = Color.White;12.break;13.case DrawingMode.Angry:14.this.BackColor = Color.Red;15.this.ForeColor = Color.Teal;16.break;17.default:18.this.BackColor = Color.Black;19.this.ForeColor = Color.White;20.break;21.}22.}现在可以向控件的paint方法添加代码,来绘制控件的样式,也可以添加现有的控件来组合实现想要的功能(例子里面有)。

[c-sharp]view plaincopy1.private void UserControl1_Paint(object sender, PaintEventArgs e)2.{3.Graphics curG = e.Graphics;4.Pen curPen = new Pen(Color.Black);5.Rectangle curRect = new Rectangle(0, 0, Width - 2, Height - 3);6.curG.DrawRectangle(curPen, curRect);7.curG.DrawEllipse(curPen, curRect);8.}事件(Event)事件是对象发送的消息,以发信号通知操作的发生。

操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。

引发事件的对象称为事件发送方。

捕获事件并对其作出响应的对象叫做事件接收方。

在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。

所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。

.NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。

代理(delegate)delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。

与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的引用。

这样,代理就等效于一个类型安全函数指针或一个回调。

它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。

但与函数指针相比,delegate有许多函数指针不具备的优点。

首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。

在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。

其次,与函数指针相比,delegate是面向对象、类型安全、可靠的受控(managed)对象。

也就是说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。

实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate:1.声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。

2.创建delegate对象,并将你想要传递的函数作为参数传入。

3.在要实现异步调用的地方,通过上一步创建的对象来调用方法。

[c-sharp]view plaincopy1.public class MyDelegateTest2.{3.// 步骤1,声明delegate对象4.public delegate void MyDelegate(string name);5.// 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型6.public static void MyDelegateFunc(string name)7.{8.Console.WriteLine("Hello, {0}", name);9.}10.public static void Main ()11.{12.// 步骤2,创建delegate对象13.MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateFunc);14.// 步骤3,调用delegate15.md("sam1111");16.}17.}C#中的事件处理实际上是一种具有特殊签名的delegate,象下面这个样子:[c-sharp]view plaincopy1.public delegate void MyEventHandler(object sender, MyEventArgs e);其中的两个参数,sender代表事件发送者,e是事件参数类。

MyEventArgs类用来包含与事件相关的数据,所有的事件参数类都必须从System.EventArgs类派生。

当然,如果你的事件不含特别的参数,那么可以直接用System.EventArgs类作为参数。

结合delegate的实现,我们可以将自定义事件的实现归结为以下几步:1:定义delegate对象类型,它有两个参数,第一个参数是事件发送者对象,第二个参数是事件参数类对象。

2:定义事件参数类,此类应当从System.EventArgs类派生。

如果事件不带参数,这一步可以省略。

3:定义事件处理方法,它应当与delegate对象具有相同的参数和返回值类型。

4:用event关键字定义事件对象,它同时也是一个delegate对象。

5:用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。

6:在需要触发事件的地方用调用delegate的方式写事件触发方法。

一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。

名字是可以是OnEventName。

7:在适当的地方调用事件触发方法触发事件。

下面是一个例子,例子模仿容器和控件的模式,由控件触发一个事件,在容器中捕捉并且进行处理。

[c-sharp]view plaincopy1.///2./// 事件的触发者3.///4.public class Control5.{6.public delegate void SomeHandler(object sender, System.EventArgs e);7.public event SomeHandler SomeEvent;8.public Control()9.{10.//这里使用的delegate必须与事件中声名的一致11.this.SomeEvent += new SomeHandler(this.ProcessSomeEvent);12.}13.public void RaiseSomeEvent()14.{15.EventArgs e = new EventArgs();16.Console.Write("Please input 'a':");17.string s = Console.ReadLine();18.//在用户输入一个小a的情况下触发事件,否则不触发19.if (s == "a")20.{21.SomeEvent(this, e);22.}23.}24.//事件的触发者自己对事件进行处理,这个方法的参数必须和代理中声名的一致25.private void ProcessSomeEvent(object sender, EventArgs e)26.{27.Console.WriteLine("hello");28.}29.}[c-sharp]view plaincopy1.///2./// 事件的接收和处理者3.///4.class Container5.{6.private Control ctrl = new Control();7.public Container()8.{9.//这里使用的delegate必须与事件中声名的一致10.ctrl.SomeEvent += new Control.SomeHandler(this.ResponseSomeEvent);11.ctrl.RaiseSomeEvent();12.}13.public static void Main()14.{15.Container pane = new Container();16.Console.ReadLine();17.}18.//这是事件的接受者对事件的响应19.private void ResponseSomeEvent(object sender, EventArgs e)20.{21.Console.WriteLine("Some event occur!");22.}23.}[c-sharp]view plaincopy1.//程序运行的结果如下:2.please input 'a':a3.hello4.Some event occur!而我们看到的工具箱上的每个控件都有自己的图标,我们可以通过下面语句为自己制作的控件添加图标。

相关文档
最新文档