tipos de datos básicos
tipo
lugar
bit de signo
el valor
El valor por defecto
explicación
bool
8
no
Verdadero Falso
hablar
byte
8
no
0
sbyte
8
Tienes
0
carbonizarse
dieciséis
no
'\ 0'
unicode
corto
dieciséis
Tienes
0
ushort
dieciséis
no
0
En t
32
Tienes
0
uint
32
no
0
largo
64
Tienes
0
ulong
64
no
0
flotador
32
Tienes
0
número de coma flotante de precisión simple
doble
64
Tienes
0
número de coma flotante de doble precisión
Prioridad de los operadores
De arriba a abajo, de izquierda a derecha
() []. ->
+ (Positivo) - (negativo) ++ - (Tipo) * Y ~ sizeof
* /%
+ -
<< >>
<<=>> =
==! =
Y (Y)
^ (O exclusivo)
(O)
&& (y)
(O)
?:
= + = - = * = / =% =
,
palabras claves comunes
sizeof(type):
Obtener el tamaño de letra.
typeof(type):
Obtener tipo System.Reflection.MemberInfo.
const:
Constante.
as:
Tipo de conversión, el fracaso no produce una excepción.
is:
La determinación de si el objeto es un cierto tipo.
??:
{A = b ?? c;} b si no se se devuelve nulo b, la devuelve ningún c. b puede ser de tipo nulo o un tipo de referencia.
Tipo de valor
Los tipos de datos básicos.
结构体:
No definir un constructor sin argumentos vacía, no heredan los miembros de la estructura no pueden ser protegidos, abstracta , vertual.
Enumeración.
Los tipos anulables: con {int? un = null;} tipos definidos en esta forma, el rango original de la gama más un nulo.
tipos de referencia
objeto
dinámica
cuerda
string str = “abc”;
string str = @ "abc"; ignorar el carácter de escape puede ser saltos de línea.
clase
interfaz
delegar
categoría
[ abstract ] [ sealed ] [ internal \public ] class [ 类名] : [ 类、接口] {
[ internal \public \protected \private ( 默认) ] [ type] [ 变量名] ;
public [ 类名] ( 参数) : base ( 参数) { }
[ internal \public \protected \private ] [ abstract ] [ 返回值类型] [ 函数名] ( ) ;
[ public \protected \private ] [ virtual ] [ 返回值类型] [ 函数名] ( ) { }
[ public \protected \private ] override [ 返回值类型] [ 父类虚函数名] ( ) { }
}
definición de clase abstracta
abstract class A {
public abstract void func ( ) ;
}
public class B : A {
public override void func ( ) { }
}
función virtual se define
public class A {
public virtual void func ( ) { }
}
public class B : A {
public override void func ( ) { }
}
interfaz
interface [ 类名] : [ 接口1 , 接口2 . . . ] {
void func ( ) ;
}
interface A {
void func ( ) ;
}
public class B : A {
public void func ( ) { }
}
confiar
La definición: delegado pública [tipo de retorno] [Nombre del delegado] (lista de parámetros);
Encuadernación:
Unicast: [nombre principal] [Nombre de la variable] = new [nombre principal] (nombre de la función);
multicast:
Añadir: [nombre principal] [Nombre de la variable] + = new [nombre principal] (nombre de función);
Eliminar: [Nombre del delegado] [nombre de la variable] - = new [nombre delegada] (nombre de función);
Llamar: [nombre de la variable] (lista de parámetros); Nota: Multicast convoco a todas las funciones ligadas, si hay un valor de retorno, el valor de retorno de una función después de la vuelta.
delegados anónimos: delegado (parámetros) {};
public class A {
public delegate int Handler ( ) ;
public A ( ) {
Handler handler = func1;
handler + = func2;
handler + = delegate ( ) { return 3 ; } ;
int r = handler ( ) ;
}
public int func1 ( ) {
return 1 ;
}
public int func2 ( ) {
return 2 ;
}
}
evento
Definiciones: evento [nombre de delegado] [nombre de la variable]
Añadir: [Nombre de la variable] + = [nombre de la función]
Eliminar: [nombre de la variable] - = [nombre de la función]
Llamar: [nombre de la variable] (lista de parámetros)
public class A {
public delegate int Handler ( ) ;
public event Handler m_event;
public A ( ) {
m_event + = func1;
m_event + = func2;
m_event + = delegate ( ) { return 4 ; } ;
int r = m_event ( ) ;
}
public int func1 ( ) {
return 1 ;
}
public int func2 ( ) {
return 2 ;
}
}
Los genéricos
tipo genérico
definiciones
estructura genérica
Nombre struct <T>
clase genérica
Nombre de la clase <T>
Interfaz genérica
Nombre de interfaz <T>
función genérica
Tipo de retorno Func <T> (T)
delegado genérico
Tipo de retorno director Nombre delegado <T> (T)
Tipo de restricción
explicación
donde T: struct
T debe ser una estructura
donde T: Clase
T debe ser una clase
donde T: interfaz
T debe interactuar
donde T: clase-il
T debe ser un Chengzi Ji siguiente clase de clase o grupo
donde T: new ()
T debe ser constructor sin argumentos
donde T: T
parámetro de tipo T para proporcionar los parámetros o parámetros derivados se debe proporcionar de la U a U proporcionado
Inversor, covariante (IN, OUT)
class A : IList < in T> { }
A< int > a1 = new A < int > ( ) ;
A< object > a2 = new A < object > ( ) ;
a1 = a2;
class A : IList < out T> { }
A< int > a1 = new A < int > ( ) ;
A< object > a2 = new A < object > ( ) ;
a2 = a1;
Parte de la clase
clase de pieza: clase puede ser dividida en una pluralidad de secciones definidas en un archivo diferente.
public partial class A {
public void func1 ( ) { }
}
public partial class A {
public void func2 ( ) { }
}
static void Main ( string [ ] args) {
A a = new A ( ) ;
a. func1 ( ) ;
a. func2 ( ) ;
}
propiedad
[AttributeUsage (AttributeTarget, allowMultiple,)] para la clase modificada.
AttributeTarget: gama.
AllowMultiple: polivalente.
si la herencia.
[El condicional ( "macros")] para la compilación condicional.
[El obsoleto ( "output", si el error)] utiliza para modificar el método obsoleto.
Definida por el usuario
[ AttributeUsage ( AttributeTarget. class | AttributeTarget. Method, true , true ) ]
public class A : System. Attribute {
int m_a;
string m_b;
public A ( int a, string b) {
m_a = a;
m_b = b;
}
}
[ A ( 1 , "abc" ) ]
class B {
[ A ( 2 , "asdgf" ) ]
public void func ( ) { }
}
hilo
Thread t = new Thread ( [ 函数名] ) ;
t. Start ( ) ;
t. Sleep ( ) ;
t. Abort ( ) ;
A a = new A ( ) ;
static void Main ( string [ ] args) {
lock ( a) {
. . .
}
}
Monitor:
Monitor.Enter (objeto);
Monitor.TryEnter (objeto); interbloqueo se puede prevenir.
Monitor.Exit (objeto);
mutex:
readonly Mutex m = new Mutex ( ) ;
static void Main ( string [ ] args) {
m. WaitOne ( ) ;
. . .
m. ReleaseMutex ( ) ;
}
ReaderWriteLockSlim a = new ReaderWriteLockSlim ( ) ;
static void Main ( string [ ] args) {
a. EnterReadLock ( ) ;
. . .
a. ExitReadLock ( ) ;
a. EnterWirteLock ( ) ;
. . .
a. ExitWriteLock ( ) ;
}
主义:不要用ReaderWriteLock,有BUG。
Semaphore a = new Semaphore ( 0 , 5 ) ;
static void Main ( string [ ] args) {
a. WaitOne ( ) ;
. . .
a. Release ( ) ;
}