假设我有一个如下定义的接口:
public interface IFunctionality
{
void Method();
}
Run Code Online (Sandbox Code Playgroud)
我为抽象类实现了这个接口,如下所示:
public abstract class AbstractFunctionality: IFunctionality
{
public void Method()
{
Console.WriteLine("Abstract stuff" + "\n");
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个具体的类,它继承自抽象类,如下所示:
public class ConcreteFunctionality: AbstractFunctionality
{
public void Method()
{
Console.WriteLine("Concrete stuff" + "\n");
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有以下代码,
ConcreteFunctionality mostDerived = new ConcreteFunctionality();
AbstractFunctionality baseInst = mostDerived;
IFunctionality interfaceInst = mostDerived;
mostDerived.Method();
baseInst.Method();
interfaceInst.Method();
Run Code Online (Sandbox Code Playgroud)
执行这些东西后我得到的输出如下.
Concrete stuff
Abstract stuff
Abstract stuff
Run Code Online (Sandbox Code Playgroud)
但是我一直期望输出在所有三种情况下都是"混凝土东西",因为我在这里做的是分配ConcreteFunctionality
类型AbstractFunctionality
和变量的引用IFunctionality
.
内部发生了什么.请澄清一下.
我有一个类型,我在IDictionary中使用它作为键.类型如下
public class Employee
{
public string Name { get; set; }
public int ID { get; set; }
public override bool Equals(object obj)
{
Employee emp = obj as Employee;
if (emp != null)
return emp.Name.Equals(this.Name);
return false;
}
public override int GetHashCode()
{
return this.Name.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我已经在我的主要内容中创建了一个字典,如下所示
IDictionary<Employee, int> empCollection = new Dictionary<Employee, int>();
Employee emp1 = new Employee() { Name = "abhi", ID = 1 };
Employee emp2 = new Employee() { Name = "vikram", ID …
Run Code Online (Sandbox Code Playgroud) 我的代码如下所示
public interface ICar
{
void Created();
}
public class BigCar : ICar
{
public void Created()
{
}
}
public class SmallCar : ICar
{
public void Created()
{
}
}
public class LuxaryCar : ICar
{
public void Created()
{
}
}
public class CarFactory
{
public ICar CreateCar(int carType)
{
switch (carType)
{
case 0:
return new BigCar();
case 1:
return new SmallCar();
case 2:
return new LuxaryCar();
default:
break;
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我有一个返回具体实例的工厂.但每次我需要有一个新的ICar接口实现时,我必须更改CarFactory的CreateCar()方法.我似乎不支持SOLID原则的开放封闭原则.请建议有更好的方法来处理这种情况.
我在代码中创建了一个excel文件,如下所示
Microsoft.Office.Interop.Excel.Application excelFile = CreateExcelFile();
Run Code Online (Sandbox Code Playgroud)
现在我想将此 excelFile 转换为 byte[] 而不保存到硬盘驱动器。这怎么可能?
在我的主窗口中,我有一个包含文本框的子控件(用户控件).如何在main(父)窗口中处理子控件文本框的textchange事件.
请给我一些代码示例,因为我是事件路由的新手.
作为对这个问题的参考,我想知道如何将搜索到的项目滚动到网格视图的视图中
我使用BackgroundWorker线程执行一个长任务(基本上读取一个大的xml文件).工作人员第一次按照需要正常工作,但如果我上传第二个xml文件,使用相同的后台工作程序,它有时可以正常工作,但大多数情况下,即使在DoWork事件之前,BackgroundWorker的RunWorkerCompleted也会被触发.部分代码显示如下
private void openFile_Click(object sender, RoutedEventArgs e)
{
// Code removed for brevity
worker = new BackgroundWorker();
worker.RunWorkerAsync();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.WorkerReportsProgress = true;
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
DataImport();
//worker.Dispose();
//worker.Disposed += new EventHandler(worker_Disposed);
//worker.DoWork -= worker_DoWork;
//worker.RunWorkerCompleted -= worker_RunWorkerCompleted;
//worker = null;
//GC.Collect(GC.GetGeneration(worker), GCCollectionMode.Forced);
}
Run Code Online (Sandbox Code Playgroud)
worker是全局定义的变量.这里有什么问题我没有得到.请帮助
我有一个课程,如下所示.为简洁起见,我删除了所有功能
public class PersonCollection:IList<Person>
{}
Run Code Online (Sandbox Code Playgroud)
现在我还有一个Model类,如下所示.AddValueCommand是从ICommand派生的类,我再次忽略了它.
public class DataContextClass:INotifyCollectionChanged
{
private PersonCollection personCollection = PersonCollection.GetInstance();
public IList<Person> ListOfPerson
{
get
{
return personCollection;
}
}
public void AddPerson(Person person)
{
personCollection.Add(person);
OnCollectionChanged(NotifyCollectionChangedAction.Reset);
}
public event NotifyCollectionChangedEventHandler CollectionChanged = delegate { };
public void OnCollectionChanged(NotifyCollectionChangedAction action)
{
if (CollectionChanged != null)
{
CollectionChanged(this, new NotifyCollectionChangedEventArgs(action));
}
}
ICommand addValueCommand;
public ICommand AddValueCommand
{
get
{
if (addValueCommand == null)
{
addValueCommand = new AddValueCommand(p => this.AddPerson(new Person { Name = "Ashish"})); …
Run Code Online (Sandbox Code Playgroud) 我上课了.我有两个实例成员变量x和y,并且该类还有一个函数,它再次接受两个名为x和y的变量.
public class MyClass
{
public int x;
public int y;
public int Add(int x , int y)
{
return (x + y);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在创建类的实例并将值分配给实例变量.如果我使用相同的实例调用该函数,则实例变量的值将更改为我作为参数传递给函数的值,如图所示下面
MyClass abs = new MyClass();
abs.x = 10;
abs.y = 11;
Console.WriteLine(abs.Add(12, 13).ToString());
Run Code Online (Sandbox Code Playgroud)
调试时我发现实例变量的值分别变为12和13.为什么会这样?究竟发生了什么.