C#的各种类

(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;

        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值