为什么我们可以在课堂外宣布代表?它是否违反OOP概念?根据oopsfundamentels,一切都必须在课堂上。那么为什么我们允许在类外创建委托呢?首先,你对OOP的“基础”是什么的想法并不是一个必不可少的要素。“面向对象”一词的发明者AlanKay有句名言:我创造了“面向对象”一词,我可以告诉你,我当时并没有想到C++。当然,“一切都在类内部”这个词汇的想法并不是OOP的基本原则。我什至不清楚“类”的概念是面向对象编程的基础;“基于类的继承”模式只是为消息传递、数据抽象和实现共享等概念嵌入语言支持的一种方式。其次,你的意思是C语言的设计者正在努力创造一种遵循OOP“基础”的语言,这是本末倒置的。相反,我们希望创建一种语言,使大型、多样化的团队能够在我们的平台上协作开发可版本化、独立、交互的软件组件。OOP恰好是一种很好的方法,所以这就是我们正在做的事情。我们当然不会尝试以任何方式制作“纯”OOP语言。如果它们支持真正的客户利益场景,我们将从任何范例中汲取灵感。C#中的思想来自OOP、过程式编程、函数式编程、动态语言等。第三,你的问题逻辑上不一致。你问为什么你可以在类之外定义一个委托。但是委托是一个类。委托是一个非常特殊的类;它始终是密封的,始终继承自System.MulticastDelegate,并且始终具有相同的成员。但这是一个教训。我们赋予它特殊的语法来表示它是一种非常特殊的类。能够在类之外定义委托类是有意义的。第四,将代表安排在教室外是合法的最终原因是因为它太方便了。您认为Func或EventHandler应该属于哪个类?那堂课会是“OOP”吗?根据传统的“OOP”智慧,一个类应该通过将操作与数据相关联来表示一个概念;您提出的Func父类的概念类是什么,它的操作和数据是什么?没有这样合理的外部类,也没有与Func的“外部类”关联的操作或数据。那么为什么要强迫用户定义一个无用的外部类,只是为了符合某些人对“OOP”是什么意思的错误观念呢?实际上一个代表就是一个类型(class)。当你声明一个委托类型时,它只是一个语法糖publicdelegateintPerformCalculation(intx,inty);委托是一种安全封装方法的类型。委托类型派生自.NETFramework中的委托类。http://msdn.microsoft.com/en-us/library/ms173172%28v=vs.80%29.aspx所以当你在类外声明一个委托时,你实际上是在创建一个新的类型/类。然后,在类中创建一个委托实例。话虽如此,就像@Mehrdad出色地指出的那样,OOP要求所有内容都必须在一个类中。这不是OOP的“基础”。它恰好是某些语言如Java的首选语言。面向对象编程只是意味着使用称为“对象”的实体对问题进行建模,这些实体具有状态和行为。它没有说明您的代码应该放在哪里。事实上,您甚至可以创建甚至没有类的“对象”。只要返回一个带有闭包的委托,你就有了一个对象。例子://一个“加法器”,将你给它的值加到它的当前值上ConverterMakeAdder(intaddend)//“constructor”{returnmsg=>{addend+=msg;返回加数;};}//。..var加法器=MakeAdder(100);//现在我有一个加法器对象!for(inti=0;i与C#中的lambda完全不同,它是一个类。你可以用SchemeThing这样的语言来做这样的事情,那里根本不存在“类”或“对象”,只有lambda.C#是多范式语言,不是纯粹的面向对象语言,我之前也想过这个,后来直接在命名空间里面声明的原因里面理解了。这是因为当你声明一个delegate的时候,一个在后台创建了巨大的类。以上是C#学习教程:为什么可以在类外声明委托?它是否违反OOP概念?如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
