这并不是说我不理解OOP概念,以及应该在什么时候做什么,但有时候我只是在精神上迷失了.
一个例子还有什么更好的?所以我需要将文件下载到临时路径,因为不相关的原因,我决定不使用dot net的常规方法来获取临时路径.所以我为此编写了自己的方法string GetTempFileSafe(string extension, out FileStream),很好,不是吗?但是,嘿,等一下,这不是这个方法的正确位置......这个方法可能用于其他事情.它需要是一个静态的公共方法.但是哪里?好吧,我想我需要为它打开一个新的静态类.希望我能在其他日子里添加更多方法.
所以我定义了public static class FileStreamUtils \\one hell of a name huh?,并添加了我的方法.但请坚持......这堂课应该在哪里?基本上我可以在任何项目中使用......它与这个特定的项目无关.所以我打开了一个全新的库,我打电话给他MyUtils.
我用我的一个静态方法将静态类添加到其中,构建了库,添加了dll作为对原始项目的引用......以及它.(注意方法调试比较困难,因为我使用的是dll而不是原代码)
现在不要误会我的意思.我真的很喜欢OOP的概念和整洁,但有时它只是在精神上耗费我的力量......也许是因为我一直都是靠自己工作.
所以你怎么看?我只是无所事事地哭泣,像开设公用事业图书馆这样的事情大多只做一次,我只需要改变态度吗?或者你认为有时候最好不要那么坚持整洁(例如,在我的情况下,只是在那里生活方法,如果我再次需要它,将它移到公共场合)?
非常感谢你.并且,如果你以某种方式成功地找到了投票给我的理由,没问题,但请发表评论,所以我不能在这里重复我的错误.
ThreadPool在图书馆使用是否可以接受?
因为如果您的图书馆的用户ThreadPool也在使用这显然可能会导致一些不愉快的问题(ThreadPool当然,由于是静态课程).
惯例是什么?
因此,我们知道诸如0.1之类的分数无法在二进制基数中准确表示,这会导致精确的问题(例如此处提到的:格式化C#中输出的双精度数).
而且我们知道我们有十进制表示数字的十进制类型...但问题是,很多数学方法,不支持十进制类型,所以我们将它们转换为double,这再次破坏了数字.
那我们该怎么办?
我已将互联网颠倒过来,并查看了Google的官方教程,寻找答案,但却找不到任何可以解决我问题的方法.
在安装完所有内容并将我的Galaxy S2连接到PC后,单击"运行方式 - > Android应用程序"只是没有.
我被困在这里
我知道有很多关于async/await的问题,但我找不到任何答案.
我遇到了一些我不理解的东西,请考虑以下代码:
void Main()
{
Poetry();
while (true)
{
Console.WriteLine("Outside, within Main.");
Thread.Sleep(200);
}
}
async void Poetry()
{
//.. stuff happens before await
await Task.Delay(10);
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Inside, after await.");
Thread.Sleep(200);
}
}
Run Code Online (Sandbox Code Playgroud)
显然,在await运算符上,控件返回给调用者,而正在等待的方法正在后台运行.(假设IO操作)
但是在控制返回到await运算符之后,执行变为并行,而不是(我的期望)保持单线程.
我希望在"延迟"完成之后,线程将被强制回到Poetry方法,从它离开的地方继续.
它做的.对我来说奇怪的是,为什么"Main"方法一直在运行?是一个线程从一个跳到另一个?还是有两个平行的线程?
这不是一个线程安全问题吗?
我发现这令人困惑.我不是专家.谢谢.
我有一个绝对的路径,一个相对的路径,我想把两者结合起来,有没有内置的方法?
相对路径也可以是" ../../aa2/file.exe".
(path.combine不支持它 - 这本身就很奇怪.)
是否有任何设计理由(就像他们放弃多重继承的原因)?
或者它只是不够重要?
并且同样的问题适用于方法中的可选参数...这已经是vb.net的第一个版本...所以它肯定没有导致MS不允许可选参数的懒惰,可能是架构决策..而且似乎他们有改变主意,因为C#4将包括那个......
有人知道决定是什么,他们为什么要放弃?
编辑:
也许你没有完全理解我.我最近在计算程序(支持任意大小的数字,到最后一位数)上工作,其中一些方法每秒使用数百万次.
假设我有一个名为Add(int num)的方法,并且这个方法在使用1作为参数(Add(1);)时非常安静,我发现实现特殊方法特别适合一个方法更快.我并不是说重载 - 编写一个名为AddOne的新方法,然后将Add方法复制到其中,除了不是使用num我正在编写1.这对你来说可能看起来非常奇怪,但它实际上更快.
(尽管丑陋)
这让我想知道为什么C#不支持手动内联,这在这里非常有帮助.
谢谢.(你为什么投票给我:S)
编辑2:
我问自己是否要加上这个.我非常熟悉为这样的项目选择像dot net这样的平台的奇怪(和缺点),但我认为点网优化比你想象的更重要...尤其是诸如Any CPU等功能.
我刚开始学习WCF,而且我来自一个完全非网络背景.
我已经构建了一个3层桌面应用程序,它编译成一个本地运行的exe.
现在我想将整个业务逻辑层移动到中心服务器,并使GUI成为客户端应用程序.
据我所知,WCF应该是我的解决方案,事实上,它帮助我实现了我想要的目标.
我管理远程功能,这是我需要的基础.
我现在的问题是,我不太了解架构.
例如,我的一个服务从我的Business Logics层返回数据类型(类).
此类通过WCF机制自动变为可供客户端使用.
但问题是,这个类包含一些方法,我绝对不希望暴露给客户端.
例如Save方法(保存到db).
此外,有时我甚至不想让客户端更改类的所有属性,因为这个类可能会被发送到我的一个服务.
我不想重新验证服务中的类实例.
我该怎么办?我应该构建另一个层,即我向客户端公开的Business Logics的受限版本吗?或者有没有办法只将部分类暴露给客户端,而不是自己限制服务器?
我知道这是一个基本问题,但说实话,我在搜索之前已经搜索了很多.我的问题是我不太清楚要搜索什么.
那么我的第二个问题是,你对任何可以解释我这个架构的资源有什么建议吗?
我已经阅读了文档和一切,但我很困惑.我以前从来不需要创建一个类,现在我也是.
我希望有类似的东西:
TextDocument.Save("filepath", "contents of file to save");
Run Code Online (Sandbox Code Playgroud)
和类似的东西:
Application.Create("filepath", "text/code to save");
Run Code Online (Sandbox Code Playgroud)
和:
Stylesheet.Save("filepath", "contents");
Run Code Online (Sandbox Code Playgroud)
并将它们放在一个类中并为它们创建方法但是我很困惑如何去做它可以有人请帮我这个吗?
谢谢,jase
c# ×7
android ×1
architecture ×1
async-await ×1
asynchronous ×1
class ×1
convention ×1
decimal ×1
double ×1
eclipse ×1
galaxy ×1
inline ×1
java ×1
oop ×1
path ×1
threadpool ×1
wcf ×1
winforms ×1