在过去,我总是使用FileStream对象来写或重写整个文件,之后我会立即关闭流.但是,现在我正在开发一个程序,我想在其中保持FileStream打开,以便允许用户在两次保存期间保持对文件的访问.(见我之前的问题).
我正在使用XmlSerializer将我的类序列化为from和XML文件.但是现在我保持FileStream打开,以便稍后用于保存(重新序列化)我的类实例.如果我重复使用相同的文件流而不是使用新的文件流,是否需要进行任何特殊考虑?我是否需要在保存之间将流重置为开头?如果稍后保存的大小比以前的保存小,那么FileStream将保留旧文件中的剩余字节,从而创建一个损坏的文件?我是否需要做一些事情来清除文件,以便它表现得好像我每次都在写一个全新的文件?
我有一个抽象类,AbsClass实现了一个接口,IClass.IClass有几个属性,只有Get访问器.AbsClass实现的属性ICLASS为抽象属性,以在从派生的类中定义AbsClass.
因此,从AbsClass派生的所有类也需要通过与Get访问器具有相同的属性来满足IClass.但是,在某些情况下,我希望能够从IClass向属性添加set访问器.然而,如果我尝试使用set访问器覆盖AbsClass中的抽象属性,我会收到此错误
ConcClassA.Bottom.Set无法覆盖,因为AbsClass.Bottom没有可覆盖的set访问器
请参阅下面的ConcClassA.
如果我有一个只实现IClass接口但没有继承自AbsClass的类,那么我可以添加一个没有问题的set访问器.请参阅 下面的ConcClassB.
我可以在AbsClass的每个派生中实现IClass,而不是直接为AbsClass实现.但是我从我的设计中知道每个AbsClass也需要一个IClass,所以我宁愿在层次结构中指定更高的值.
public interface IClass
{
double Top
{
get;
}
double Bottom
{
get;
}
}
abstract class AbsClass:IClass
{
public abstract double Top
{
get;
}
public abstract double Bottom
{
get;
}
}
class ConcClassA : AbsClass
{
public override double Top
{
get …Run Code Online (Sandbox Code Playgroud) 我正在编写一个通过FTP站点同步文件的应用程序.现在它正在通过常规FTP连接,但现在我们的IT人员希望通过安全的FTPS连接进行设置.
他们为我提供了一个*.cr_证书文件.如果我在记事本中打开文件,我会看到类似的东西(但真正的键显然不是foobar).
-----BEGIN RSA PRIVATE
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
如何使用此证书文件连接到FTPS服务器以上载和下载文件?原谅我,但我对涉及通过网络传输文件,安全连接,证书,公钥,私钥等等的任何事情都很陌生......等等......
我想我想使用FtpWebRequest对象并将EnableSsl属性设置为true.但我不确定这个证书文件在哪里发挥作用.
我知道你不应该编写缓存所有异常类型的代码.
try
{
//code that can throw an exception
}
catch
{
//what? I don't see no
}
Run Code Online (Sandbox Code Playgroud)
相反,你应该做更像下面的代码的事情,允许你没有想到的任何其他异常.
try
{
//code that can throw an exception
}
catch(TypeAException)
{
//TypeA specific code
}
catch(TypeBException)
{
//TypeB specific code
}
Run Code Online (Sandbox Code Playgroud)
但如果你用另一个异常包装它们,是否可以捕获所有异常类型?考虑下面的这个Save()方法我写的是Catalog类的一部分.我是否有任何错误捕获所有异常类型并返回单个自定义CatalogIOException,原始异常作为内部异常?
基本上我不希望任何调用代码必须知道可能在Save()方法中抛出的所有特定异常.他们只需要知道他们是否试图保存只读目录(CatalogReadOnlyException),目录无法序列化(CatalogSerializationException),或者是否存在写入文件的问题(CatalogIOException).
这是处理异常的好方法还是坏方法?
/// <summary>
/// Saves the catalog
/// </summary>
/// <exception cref="CatalogReadOnlyException"></exception>
/// <exception cref="CatalogIOException"></exception>
/// <exception cref="CatalogSerializingExeption"></exception>
public void Save()
{
if (!this.ReadOnly)
{
try
{
System.Xml.Serialization.XmlSerializer serializer = new XmlSerializer(typeof(Catalog));
this._catfileStream.SetLength(0); //clears the file …Run Code Online (Sandbox Code Playgroud) 我正在为另一个应用程序Autodesk Revit开发一个加载项,它是作为一个单独的DLL类库构建的.我正在尝试在我的一个WPF窗口中使用Wpf工具包属性网格.属性网格在Visual Studio中显示正常,而intellisense也可以.但是当我尝试使用加载项加载启动Revit时,我得到以下异常.
System.Windows.Markup.XamlParseException occurred
HResult=-2146233087
Message=Could not load file or assembly 'Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4' or one of its dependencies. The system cannot find the file specified.
Source=PresentationFramework
LineNumber=133
LinePosition=27
StackTrace:
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
InnerException: System.IO.FileNotFoundException
HResult=-2147024894
Message=Could not load file or assembly 'Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4' or one of its dependencies. The system cannot find the file specified.
Source=mscorlib
FileName=Xceed.Wpf.Toolkit, PublicKeyToken=3e4669d2f30244f4
FusionLog==== Pre-bind state information ===
LOG: User = GLOBAL\eric.anastas …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写验证来检查Object实例是否可以转换为变量Type.我有一个Type实例,用于他们需要提供的对象类型.但类型可能会有所不同.这基本上就是我想要做的.
Object obj = new object();
Type typ = typeof(string); //just a sample, really typ is a variable
if(obj is typ) //this is wrong "is" does not work like this
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
类型对象本身具有IsSubClassOf和IsInstanceOfType方法.但我真正想要检查的是obj是typ的实例还是从typ派生的任何类.
看起来像一个简单的问题,但我似乎无法弄明白.
我对Visual Studio允许将动态值保存到项目的不同方式以及如何使用它们感到困惑.
我知道如果我需要在我的应用程序中包含像图像或声音文件这样的二进制信息,我需要将其添加到资源文件中.但是,如果我将类似文件路径的内容保存为字符串,为什么我应该在资源文件中使用或不使用应用程序settings(app.config)文件或用户设置(myapp.dll.config)文件中的字符串?
.net settings resources application-settings visual-studio-2008
我有一个包含集合的类.我想提供一个返回集合内容的方法或属性.如果调用类可以修改单个对象,但我不希望它们在实际集合中添加或删除对象,这是可以的.我一直在将所有对象复制到一个新列表,但现在我想我可以将列表作为IEnumerable <>返回.
在下面的简化示例中,GetListC是返回集合的只读版本的最佳方法吗?
public class MyClass
{
private List<string> mylist;
public MyClass()
{
mylist = new List<string>();
}
public void Add(string toAdd)
{
mylist.Add(toAdd);
}
//Returns the list directly
public List<String> GetListA
{
get
{
return mylist;
}
}
//returns a copy of the list
public List<String> GetListB
{
get
{
List<string> returnList = new List<string>();
foreach (string st in this.mylist)
{
returnList.Add(st);
}
return returnList;
}
}
//Returns the list as IEnumerable
public IEnumerable<string> GetListC
{
get
{
return …Run Code Online (Sandbox Code Playgroud) 我在一家大型建筑公司的技术小组工作.虽然这里有很多人非常精通各种编程和脚本语言,但它远离软件公司开发环境的环境.很少有一两个人在开发项目上工作,其中大多数只是自动化脚本.没有源代码控制或版本控制设置或类似的东西.
我的学术背景是工程,但不是CS或CE.所以我在学校里参加了一些编程课程,当我还是个小孩的时候,实际上用VB修补了很多.然而直到去年我目前的工作才真正有机会在学校的家庭作业问题之外做任何真正的发展.在过去的一年里,我已经从简单的自动化脚本转变为C#.NET中的完整插件应用程序.
我有CS或CE专业的家人和朋友,并为主要产品是软件的公司工作.虽然没有兴趣为一家软件公司工作,但似乎他们确实比我有一个重大优势.在他们的工作中,他们拥有更多经验,可以查看他们的应有的人,并给他们建议,以改善他们的代码或逻辑.Stack Overflow等网站非常适合解决错误和获取建议,但只有当您知道需要建议时才能使用.我确信有很多次我采取完全错误的做法.
有哪些最佳方法可以改善这些现实生活中的编程技巧?有没有办法找到我可以帮助解决的开源项目(最好是.Net),这样我就可以获得与其他(更有经验的)程序员合作的经验?我也一直在研究设计模式,但很难识别何时使用某些模式.
我知道从另一个类继承的类可能会使用new关键字隐藏属性.但是,这隐藏了属性的特定实现,因此我可以看到它是如何使用的.
是否有任何实际的理由在实现其他接口的接口中隐藏成员?例如,考虑以下示例.IChildInterface 实施IParentInterface和隐藏PropertyA.
interface IParentInterface
{
string Name { get; set; }
int PropertyA { get; set; }
int PropertyB { get; set; }
}
interface IChildInterface : IParentInterface
{
int PropertyA { get; set; }
int PropertyC { get; set; }
}
Run Code Online (Sandbox Code Playgroud) c# ×9
.net ×5
interface ×2
properties ×2
casting ×1
collections ×1
file-io ×1
filestream ×1
ftps ×1
polymorphism ×1
readonly ×1
resources ×1
revit ×1
revit-api ×1
settings ×1
ssl ×1
types ×1
wpf ×1
wpftoolkit ×1