C#的各种类

本文深入探讨C#中的各种类概念,包括静态类、部分类、匿名类、内部类、抽象类和密封类等。通过具体代码示例展示了各类的特点及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(Class)

1. 静态类,如果类只包含静态的方法和属性,该类就是静态的.静态类在功能上与使用私有静态函数创建的类相同.不能创建静态类的实例,静态类不能被继承.使用static关键字,编译器可以检查以后是否给该类添加了实例成员,这可以确保不创建静态类的实例.

2. 部分类,partial关键字允许类,接口或结构放在多个文件中,这样做的好处:

1) 一个大型的项目类可以同时分成不同的区块交由不同的程序员拽写,同时进行

2) 若有系统自动产生source,可以用独立的Partial Class加入,而不用更改原先的类

3) 当类很大时,可以用Partial Class做功能性划分,这也是一种不错的分类方式

如果在声明类时使用了以下的关键字,这些类将用于同一个类的所有部分:

public, private, protected, internal, abstract, sealed, new

在把部分类编译到类型中时,会合并属性,XML 注释,接口,泛型类型的参数属性和成员

3. 匿名类,匿名类型只是一个继承了Object的,没有名字的类。该类得定义初始化器中推断,类似于隐式类型化的变量。

4. 内部类,C#中的内部类能够使用外部类定义的类型和静态方法,但是不直接使用外部类的实例方法,直接看来,外部类的作用更像是一个命名空间,在C#中,始终可以用Sys.Model.Key key = new Sys.Model.Key();来创建一个内部类的实例,这个实例与外部类的任何实例没有任何直接的关系。类似于Java中的静态内部类。

C#中,类分为Nested ClassNon-Nested Class,前者是声明在其他数据类型内部的类。后者是直接定义在某一命名空间的类。

非嵌套类只允许使用publicinternal的访问控制,而内置类则允许使用所有的5种访问修饰符。内部类也可以访问外部类的所有方法,包括instance方法和private方法,但是需要显示的传递一个外部类的实例

内部类的反射名称的.改为+,例如Sys.Model+Key[其中KeyModel的内部类]

5. 抽象类,C#中允许将类和方法声明为abstract,抽象类不能实例化,而抽象函数没有执行代码,必须由非抽象的派生类中重写。如果类包含抽象函数,该类也是抽象的,也必须声明为抽象的。抽象类不能被密封

6. 密封类,C#中把类和方法声明为sealed。对于类来说,这表示不能继承该类;对于方法来说,表示不能重写该方法。当用于方法或属性时,sealed修饰符必须始终与override一起使用

.NET基类库大量使用了密封类,使希望从这些类中派生出自己类的第三方开发人员无法访问这些类

Java开发人员可以把C#中的sealed当作Java中的final

Codes:

class Program

{

static void Main(string[] args)

{

PartialClass partialClass = new PartialClass();

Console.WriteLine(partialClass.Method("Xufei"));

Console.WriteLine();

InstanceClass instanceClass = new ChildClass();

InstanceClass instanceClass1 = new InstanceClass();

Console.WriteLine(instanceClass1.Method("Xufei"));

Console.WriteLine(instanceClass.Method("Xufei"));

Console.WriteLine();

Console.WriteLine(StaticClass.Method());

Console.WriteLine();

InstanceClass.NestedClass nestedClass = new InstanceClass.NestedClass();

Console.WriteLine(nestedClass.Method("Xufei"));

Console.WriteLine();

InstanceClass.NestedClass nestedClass2 = InstanceClass.nestedClass;

Console.WriteLine(nestedClass2.Method());

Console.WriteLine();

Console.WriteLine(instanceClass.Method());

Console.ReadKey();

}

}

/// <summary>

/// ?ª¡§¤¨¤

/// </summary>

class InstanceClass

{

public static NestedClass nestedClass;

public virtual string Method(string str)

{

return str;

}

static InstanceClass()

{

nestedClass = new NestedClass("Xufei");

}

/// <summary>

/// ??¤¨¤dynamicClass

/// </summary>

/// <returns></returns>

public string Method()

{

var dynamicClass = new { name = "Xufei", hometown = "Liayang" };

return dynamicClass.name;

}

/// <summary>

/// ¨²?¤¨¤

/// </summary>

public class NestedClass

{

string str;

public string Method()

{

InstanceClass instanceClass = new InstanceClass();

return instanceClass.Method(str);

}

public string Method(string str)

{

InstanceClass instanceClass = new InstanceClass();

return instanceClass.Method(str);

}

public NestedClass() { }

public NestedClass(string theStr)

{

str=theStr;

}

}

}

/// <summary>

/// Á¨®¤¨¤

/// </summary>

class ChildClass : InstanceClass

{

public sealed override string Method(string str)

{

return str + " Fan";

}

}

/// <summary>

/// 2¬?¤¨¤

/// </summary>

static class StaticClass

{

private static string str;

public static string Method()

{

return str;

}

static StaticClass()

{

str = "Xufei";

}

}

/// <summary>

/// ¨¦¨®¤¨¤

/// </summary>

abstract class AbstractClass

{

public abstract void Method();

public virtual string Method(string str)

{

return str;

}

}

/// <summary>

/// ¨¹¤a¤¨¤

/// </summary>

sealed class SealedClass : AbstractClass

{

public sealed override void Method(){}

public sealed override string Method(string str)

{

return base.Method(str);

}

}

/// <summary>

/// ?¤?¤¨¤

/// </summary>

partial class PartialClass

{

public void Method() { }

}

partial class PartialClass

{

public string Method(string str)

{

return str;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值