Tag: C#的

与索引foreach

有没有Python的enumerate()和Ruby的each_with_index的C#等价?

为什么不可能覆盖只有getter属性并添加setter?

你为什么认为(或者说,为什么这么好)微软select不允许: public abstract class BaseClass { public abstract int Bar { get;} } public class ConcreteClass : BaseClass { public override int Bar { get { return 0; } set {} } } CS0546“ConcreteClass.Bar.set”:无法重写,因为“BaseClass.Bar”没有可覆盖的set访问器

Lambda捕获和参数具有相同的名称 – 谁影响其他? (铿锵vs gcc)

auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); 铿锵声++ 3.6.0和更新的打印出“你正在使用铛++!” 并警告捕捉 foo未被使用。 g ++ 4.9.0和更新版本打印出“您正在使用g ++!” 并警告参数 foo未被使用。 什么编译器在这里更精确地遵循C ++标准? wandbox例子

Double的“==”运算符的定义

出于某种原因,我偷偷进入Double类的.NET Framework源代码,发现==的声明是: public static bool operator ==(Double left, Double right) { return left == right; } 同样的逻辑适用于每个操作员。 这个定义是什么意思? 它是如何工作的? 为什么不创build一个无限recursion?

数据映射器,表数据网关(网关),数据访问对象(DAO)和存储库模式之间有什么区别?

我正试图刷新我的devise模式技能,我很好奇这些模式之间有什么区别? 他们看起来都是一样的东西 – 封装特定实体的数据库逻辑,所以调用的代码不知道底层的持久层。 从我简短的研究中,他们通常都会实现您的标准CRUD方法,并将数据库特定的细节抽象出来。 除了命名约定(例如,CustomerMapper与CustomerDAO与CustomerGateway与CustomerRepository),有什么区别? 如果有区别,你什么时候select一个呢? 在过去,我会写代码类似于以下(简化,自然 – 我通常不会使用公共属性): public class Customer { public long ID; public string FirstName; public string LastName; public string CompanyName; } public interface ICustomerGateway { IList<Customer> GetAll(); Customer GetCustomerByID(long id); bool AddNewCustomer(Customer customer); bool UpdateCustomer(Customer customer); bool DeleteCustomer(long id); } 并有一个CustomerGateway类来实现所有方法的特定数据库逻辑。 有时我不会使用一个接口,并使CustomerGateway上的所有方法都是静态的(我知道,我知道这使得它更lesstesting),所以我可以这样调用它: Customer cust = CustomerGateway.GetCustomerByID(42); 这似乎是数据映射器和存储库模式的相同原理; DAO模式(与Gateway相同,我认为?)似乎也鼓励数据库特定的网关。 我错过了什么吗? […]

什么时候在C#中使用线程池?

我一直在尝试学习C#中的multithreading编程,我很困惑什么时候最好使用线程池,创build自己的线程。 一本书build议使用一个线程池只用于小任务(不pipe这意味着什么),但我似乎无法find任何真正的指导方针。 在做出这个编程决定时,你需要考虑什么?

对静态constexpr char 的未定义引用

我想在我的类中有一个static const char数组。 海湾合作委员会抱怨说,我应该使用constexpr ,但现在它告诉我这是一个未定义的参考。 如果我让数组成为非成员,那么它编译。 到底是怎么回事? // .hpp struct foo { void bar(); static constexpr char baz[] = "quz"; }; // .cpp void foo::bar() { std::string str(baz); // undefined reference to baz }

1.0是从std :: generate_canonical有效的输出?

我一直认为随机数在0和1之间, 没有1 ,即它们是半开区间[0,1)的数字。 std::generate_canonical cppreference.com上的文档证实了这一点。 但是,当我运行以下程序: #include <iostream> #include <limits> #include <random> int main() { std::mt19937 rng; std::seed_seq sequence{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; rng.seed(sequence); rng.discard(12 * 629143 + 6); float random = std::generate_canonical<float, std::numeric_limits<float>::digits>(rng); if (random == 1.0f) { std::cout << "Bug!\n"; } return 0; } 它给了我以下输出: Bug! 即它产生了一个完美的1 ,这导致了我的MC集成中的问题。 […]

在同一个项目中混合使用C#和VB

你可以在一个类库的同一个项目中混合使用vb和c#文件吗? 有一些设置可以吗? 尽pipe后台编译器似乎处理得很好(除了我在同一个名字空间中有两个同名的命名空间并且没有抱怨的事实),我仍然没有任何的intellisense工作正常。 我们试图从VB转换到C#,但还没有完成转换所有的代码。 我有一些我需要编写的新代码,但并不是真的想为它创​​build一个新的项目。

在C ++ 11中传递值是合理的默认值?

在传统的C ++中,将值传递给函数和方法对于大对象来说是缓慢的,并且通常是不被接受的。 相反,C ++程序员倾向于传递引用,这是更快的,但是引入围绕所有权的各种复杂的问题,尤其是围绕内存pipe理(如果对象是堆分配的话) 现在,在C ++ 11中,我们有Rvalue引用和移动构造函数,这意味着可以实现一个很大的对象(比如std::vector ),这个对象可以很便宜地传入和传出函数。 那么,这是否意味着默认值应该是为types的实例传递值,比如std::vector和std::string ? 那么自定义对象呢? 什么是新的最佳做法?