当前位置: 首页 > 编程语言 > C#

重构我的代码:避免在派生类中强制转换Share

时间:2023-04-10 12:01:38 C#

重构我的代码:避免在派生类中强制转换.我希望用代码更好地解释它。公共抽象类AB{publicMyModel模型;}publicclassA:AB{publicA(){Model=newMyModelA();}publicvoidAMethod(){var模型=(MyModelA)模型;//我必须在所有地方都这样做}publicvoidAnotherMethod(){varmodel=(MyModelA)model;//相同的模型。新整数=123;}}publicabstractclassMyModel{}publicclassMyModelA:MyModel{//新属性publicintNewInt{get;set;}}查看代码,为了使用派生类的新属性,我必须做一个投,但是当我必须同时使用它时它很难看。我认为的方法是声明另一个属性:publicMyModelA_tmp然后我将它转换为构造函数_tmp=(MyModelA)Model并使用它而不是Model。还有其他正确的方法吗?谢谢!您可以使基类通用:publicabstractclassServiceBasewhereTModel:new(){protectedServiceBase(){Model=newTModel();}公共TModel模型{得到;私有集;}}公共类AService:ServiceBase{..您可以在派生类中维护模型引用:publicabstractclassAB{publicMyModelModel;}publicclassA:AB{MyModelMyModel;publicA(){MyModel=newMyModelA();模型=我的模型;}publicvoidAMethod(){//只使用MyModel}publicvoidAnotherMethod(){MyModel.NewInt=123;}}publicabstractclassMyModel{}publicclassMyModelA:MyModel{//newpropertiespublicintNewInt{get;set;}}使用_tmp的解决方案让你不得不一直写那个手册,但仍然有奇怪的对象设计问题。我猜你的NewInt在那里执行某种也存在于MyModel中的功能(否则你最好先为它创建一个新类)。我想知道您是否不能以MyModelA不必公开任何新内容的方式封装该功能。这可能意味着改变AB的定义以允许这样的概括。我相信,答案既不是语法,也不是在不了解领域的情况下在OOP模式中轻易找到的。也许你可以提供一些细节。以上是C#学习教程:Refactoringmycode:Avoidingforcedconversioninderivedclasses。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处: