我有一个具体的基类Foo,包含30个与其子类相关的方法.
现在我遇到了一个仅针对基类的情况,我想创建一个无法继承的方法,这可能吗?
Class Foo
{
/* ... inheritable methods ... */
/* non-inheritable method */
public bool FooSpecificMethod()
{
return true;
}
}
Class Bar : Foo
{
/* Bar specific methods */
}
var bar = new Bar();
bar.FooSpecificMethod(); /* is there any way to get this to throw compiler error */
Run Code Online (Sandbox Code Playgroud)
编辑
我不确定我最初是否清楚.
我理解继承的原则,我理解Liskov替代原则.在这种情况下,只有一个例外处理"未继承"的情况,所以我不想创建一个'uninheritedFoo'子类.
我问在技术上是否可能创建一个foo.FooSpecificMethod()是有效且可公开访问的方法的情况,但是subclassoffoo.FooSpecificMethod()会抛出编译器错误.
基本上我想在一个未密封的课上使用密封方法.
我需要创建一个应用程序,它将读取和写入文件(C++/MFC).但我需要进程不要出现在进程监视器(随SysInternals一起提供)中.
从其他人的反应来看,我现在确认这似乎是"非法的".但那是我正在处理的客户的要求.所以,我想我只需要满足客户的要求.
在我的项目中,我在同一台服务器上有两个独立的DB.除了DB"B"中需要在DB"A"中访问的三列之外,DB是自给自足的.
如果我在A中有一个直接从B访问三列的存储过程,是否有性能方面的考虑?
目前,我们运行一个夜间作业将表B中所需的数据导入表A,这样存储的proc就不会超出A的范围.
这是最好的方法吗?
跨数据库存储过程是否在最佳实践中?
我有以下代码
class Program
{
static void Main(string[] args)
{
List<A> aList = new List<A>();
var aObj = new A();
aObj.Go(aList.Cast<IB>());
}
}
class A : IB
{
public void Go(IEnumerable<IB> interfaceList)
{
foreach (IB ibby in interfaceList)
{
Console.WriteLine("Here");
}
}
}
interface IB
{
void Go(IEnumerable<IB> interfaceList);
}
Run Code Online (Sandbox Code Playgroud)
}
我最初尝试传递一个List,但这不起作用.经过SO的大量帮助后,我发现传递IEnumerable是获取对象的唯一方法.ofType(IB).
不幸的是,在我的代码中,以下行将被执行数千次:
aList.Cast<IB>();
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人知道它是如何通过算法实现的(在IL中)以及它的时间顺序.
也就是说,它是否比仅仅投射每个项目的foreach循环更快,还是它正是它的作用?
编辑主类需要维护实际对象的列表.但是只允许读者通过界面触摸它们.
似乎在我努力维持OO原则时,这一切看起来都是如此做作或不自然.