我最近重新编写了一个自己的库来尝试将接口与实现分离.我在最后一个问题上遇到了一个用于返回另一个类的实例的类.
在接口定义中,我做了类似的事情
struct IFoo
{
virtual const IBar& getBar() = 0;
}
Run Code Online (Sandbox Code Playgroud)
然后在具体的Foo getBar看起来像
const IBar& Foo::getBar()
{
Bar ret = Bar();
return ret;
}
Run Code Online (Sandbox Code Playgroud)
问题是,一旦getBar完成就会删除ret,当复制构造函数试图像这样使用Bar时会导致严重崩溃
const Bar myBar = myFoo.getBar();
Run Code Online (Sandbox Code Playgroud)
我一直在阅读各种各样的东西,我知道通过引用返回是不受欢迎的,但我没有看到任何其他方式(我不想返回Bar*因为我不想手动删除返回值).
抽象类返回从另一个抽象类派生的具体类的实例的正确方法(如果存在任何方式)是什么?
注意我确实看到了这个解决方案:从函数返回一个抽象类, 但我不想让返回值静态和松散线程安全.
纵观Project Server 2010的SDK(发现这里在.net反射,我发现一些有趣的事情是让我困惑.
显然,SvcProject.ProjectClient该类ProjectServerServices.dll继承自System.ServiceModel.ClientBase<Project>,这是一个实现System.IDisposable接口的抽象类.但是,当我检查SvcProject.ProjectClient类(不是抽象的)时,没有Dispose方法.是什么赋予了?我认为从接口继承的每个方法都必须在具体的实现中实现(否则接口的用途是什么)..NET Reflector对我说谎吗?微软出于某种原因绕过了这个要求吗?这是怎么回事?
我有下面的界面;
public static interface Attributes
{
public final static String InterestDeterminationDate = "InterestDeterminationDate";
public final static String CreditType = "CreditType";
public final static String NumberInternal = "NumberInternal";
public final static String InterestRate = "InterestRate";
public final static String RemainingDebtAmount = "RemainingDebtAmount";
public final static String ConsumerPart = "ConsumerPart";
public final static String TechnicalProductName = "TechnicalProductName";
public final static String TermOfDuration = "TermOfDuration";
public final static String PeriodInterestTaxReduction = "PeriodInterestTaxReduction";
public final static String OriginMark = "OriginMark";
public final static String …Run Code Online (Sandbox Code Playgroud) 一个类是否应该实现一个接口,以便在类上强制执行某种"契约"?
什么时候不应该实现一个接口?
编辑:意思,什么时候让一个类实现一个接口是值得的?为什么没有一个类只有公共成员和私有成员具有各种访问者/设置者功能?
(注意:不是在谈论COM)
我有一个实现3个接口的抽象类.
public abstract class ServiceBaseCore<Entity, EntityKey> : MarshalByRefObject, IComponentService, IEntityProvider<Entity, EntityKey>
where Entity : IEntityId<EntityKey>, new()
where EntityKey : IEntityKey, new()
{
// Provided functionality/body to some methods of interface
}
Run Code Online (Sandbox Code Playgroud)
问题:我得到的错误是我的抽象类没有为接口函数提供实现(定义/正文),其中我读到的是"如果一个类是抽象的,那么就不需要为所有/任何函数提供主体界面实施".
注意:代码是由codeSmith生成的,即使它显示错误.
请告诉我我错在哪里以及我错过了什么.
谢谢
首先,这只是一个面向对象的编程问题,并不特别适用于任何语言.
这对我来说非常尴尬.这件事发生在我的工作中,我太害羞了,无法向同事澄清这一点,因为这表明我对面向对象编程的理解不足.所以这是事件:
有它实现接口I.这个接口有M. A类定义了体或者说此方法的实现的方法的A类.现在我有一个工具,使用它我可以找出哪些其他类或程序使用,或者换句话说,调用A类 - >方法M.When我用这个工具,它不返回任何结果; 我没有上课的指示是调用方法M.
当我分享我的观察与资深同事,他干脆跑到接口I - >法男,并在此所用的工具.它返回了不少结果.他告诉我,这些都是类或调用子程序M的方法,让我继续.
这个结果显然是实现接口I的那些类的列表.但我不明白的是,这是如何调用类A - >方法M的类或方法的集合.因为我自信地告诉我的同事没有类调用方法M,在他向我展示结果列表后,我太尴尬地问他怎么样,我正在寻找的结果.
知道我的同事暗示的是什么吗?
此致,Mithun
我有以下声明:
List<List<String>> myList = new ArrayList<ArrayList<String>>();
List<ArrayList<String>> myList = new ArrayList<ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)
第一个给出编译错误.我们不应该编码接口吗?在这里,我被迫按类而不是接口进行编码.这是一个泛型失败,还是我理解错了?
在C#中,我有一个接口,并且有一些类将实现此接口.我有一个通用的实用程序类,我想限制,以便实用程序类只能使用实现该接口的类型声明,如下所示,我该怎么办?
public interface IMyInterface
{}
public class A : IMyInterface {} // can pass into UtilityClass
public interface B : IMyInterface{}
public class C : B {} // can pass into UtilityClass
public class D {} // can Not pass into UtilityClass
public class UtilityClass<T is IMyInterface>
{
// some utility function
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我的开发团队,如果离岸和主机在测试站点上工作.我希望他们在测试站点上创建一个接口,在那里我可以运行SQL查询来检查数据库中的数据(因此所有读取)+能够通过接口加载查找值/创建表等(写入).
我看到stackoverflow与它的数据资源管理器类似,我们可以通过自定义查询读取数据.我需要同样的东西+还需要写.
所以问题是:如何创建这个界面?它是一个插件,现成的开源还是需要从头开始?
我正在使用PHP codeignitor和MySQL.