C# 如何生成抽象类并在其他类中继承
我有两个CLSS,它们的代码相似,但变量不同 ISource.cs ITarget.csC# 如何生成抽象类并在其他类中继承,c#,asp.net,.net,C#,Asp.net,.net,我有两个CLSS,它们的代码相似,但变量不同 ISource.cs ITarget.cs 现在我想创建一个抽象类,将我的公共代码放在该类文件中,然后在这两个类文件中继承该代码 public interface ITarget { string LocalConfigPath { get; } string LocalVersion { get; } IDictionary<string, string> LocalFiles { get; } } publi
现在我想创建一个抽象类,将我的公共代码放在该类文件中,然后在这两个类文件中继承该代码
public interface ITarget
{
string LocalConfigPath { get; }
string LocalVersion { get; }
IDictionary<string, string> LocalFiles { get; }
}
public interface ISource
{
string AvailConfigPath { get; }
string AvailVersion { get; }
IDictionary<string, string> AvailFiles { get; }
}
internal abstract class BaseClass
{
public virtual string ConfigPath { get; }
private XDocument document = XDocument.Load(ConfigPath);
public string Version
{
get
{
return document.Root
.Element("InfoConfigFile")
.Attribute("version").Value;
}
}
public IDictionary<string, string> Files
{
get
{
return document.Root
.Element("files")
.Elements("file")
.ToDictionary(x => x.Attribute("name").Value,
x => x.Attribute("version").Value);
}
}
}
internal class Target : BaseClass, ITarget
{
public override string LocalConfigPath
{
get
{
return @"D:\Mindful\Visual Studio 2012\Projects\AutoUpdator\AutoUpdator\Target\LocalInfoFile.config";
}
}
public string LocalVersion
{
get { return Version; }
}
public IDictionary<string, string> LocalFiles
{
get { return Files; }
}
}
public class Source : BaseClass, ISource
{
public override string AvailConfigPath
{
get
{ return @"D:\Mindful\Visual Studio 2012\Projects\AutoUpdator\AutoUpdator\Source\AvailInfoFile.config"; }
}
public string AvailVersion
{
get { return Version; }
}
public IDictionary<string, string> AvailFiles
{
get { return Files; }
}
}
注意:不要使用类名BaseClass-使其更适合于域。我只是用它来说明它是基类
还要注意,若源是公共的,那个么基类也必须是公共的。如果你真的想烘焙基类内部,那么你可以使用封装而不是继承——这仍然是在重复使用代码,但管道是不同的。多亏了D Stanley,你的回答在解决这个问题上帮了我很大的忙
AbstractClass.cs
ISource.cs
ITarget.cs
好吧,那么是什么阻止了你?我想要一百万美元用虚拟定义编写抽象类,并在派生类中重写它们。我想他对自己的设计感到困惑,感觉不对,也不确定。但他也不能清楚地解释他想做什么。达什瓦达尔惊叹道,这感觉不对。力量似乎不平衡……如果德斯坦利帮助了你,为什么他没有公认的答案?在这种情况下,我们不需要看到最终结果。
public interface ITarget
{
string LocalConfigPath { get; }
string LocalVersion { get; }
IDictionary<string, string> LocalFiles { get; }
}
internal class Target : ITarget
{
public string LocalConfigPath
{
get
{
return @"D:\Mindful\Visual Studio 2012\Projects\AutoUpdator\AutoUpdator\Target\LocalInfoFile.config";
}
}
private XDocument document = XDocument.Load(@"D:\Mindful\Visual Studio 2012\Projects\AutoUpdator\AutoUpdator\Target\LocalInfoFile.config");
public string LocalVersion
{
get
{
return document.Root
.Element("InfoConfigFile")
.Attribute("version").Value;
}
}
public IDictionary<string, string> LocalFiles
{
get
{
return document.Root
.Element("files")
.Elements("file")
.ToDictionary(x => x.Attribute("name").Value,
x => x.Attribute("version").Value);
}
}
}
public interface ITarget
{
string LocalConfigPath { get; }
string LocalVersion { get; }
IDictionary<string, string> LocalFiles { get; }
}
public interface ISource
{
string AvailConfigPath { get; }
string AvailVersion { get; }
IDictionary<string, string> AvailFiles { get; }
}
internal abstract class BaseClass
{
public virtual string ConfigPath { get; }
private XDocument document = XDocument.Load(ConfigPath);
public string Version
{
get
{
return document.Root
.Element("InfoConfigFile")
.Attribute("version").Value;
}
}
public IDictionary<string, string> Files
{
get
{
return document.Root
.Element("files")
.Elements("file")
.ToDictionary(x => x.Attribute("name").Value,
x => x.Attribute("version").Value);
}
}
}
internal class Target : BaseClass, ITarget
{
public override string LocalConfigPath
{
get
{
return @"D:\Mindful\Visual Studio 2012\Projects\AutoUpdator\AutoUpdator\Target\LocalInfoFile.config";
}
}
public string LocalVersion
{
get { return Version; }
}
public IDictionary<string, string> LocalFiles
{
get { return Files; }
}
}
public class Source : BaseClass, ISource
{
public override string AvailConfigPath
{
get
{ return @"D:\Mindful\Visual Studio 2012\Projects\AutoUpdator\AutoUpdator\Source\AvailInfoFile.config"; }
}
public string AvailVersion
{
get { return Version; }
}
public IDictionary<string, string> AvailFiles
{
get { return Files; }
}
}
public abstract class BaseClass
{
private string _ConfigPath;
public string ConfigPath
{
get { return _ConfigPath; }
set { _ConfigPath = value; }
}
private XDocument _Document = null;
private XDocument document
{
get
{
if (_Document == null)
_Document = XDocument.Load(ConfigPath);
return _Document;
}
}
public string Version
{
get
{
return document.Root
.Element("InfoConfigFile")
.Attribute("version").Value;
}
}
public IDictionary<string, string> Files
{
get
{
return document.Root
.Element("files")
.Elements("file")
.ToDictionary(x => x.Attribute("name").Value,
x => x.Attribute("version").Value);
}
}
}
public interface ISource
{
string ConfigPath { get; }
string AvailVersion { get; }
IDictionary<string, string> AvailFiles { get; }
}
public class Source : BaseClass, ISource
{
public Source()
{
ConfigPath = @"D:\Mindful\Visual Studio 2012\Projects\AutoUpdator\AutoUpdator\Source\AvailInfoFile.config";
}
public string AvailVersion
{
get
{
return Version;
}
}
public IDictionary<string, string> AvailFiles
{
get
{
return Files;
}
}
}
public interface ITarget
{
string ConfigPath { get; }
string LocalVersion { get; }
IDictionary<string, string> LocalFiles { get; }
}
internal class Target : BaseClass, ITarget
{
public Target()
{
ConfigPath = @"D:\Mindful\Visual Studio 2012\Projects\AutoUpdator\AutoUpdator\Target\LocalInfoFile.config";
}
public string LocalVersion
{
get
{
return Version;
}
}
public IDictionary<string, string> LocalFiles
{
get
{
return Files;
}
}
}