在Visual Studio中,如果我打开了代码文件,我可以按CTRL+ M或CTRL+ M+ O折叠所有代码块,区域,命名空间等.
如何做相反的事情并扩展一切?
我用Google搜索了这个,但似乎找不到有效的捷径!
很长一段时间以来,我一直坚持使用Windows Forms开发(从VB6开始,一直到C#.NET 4.5),而且我已经达到了Windows Forms可以做的极限,两者都使用纯.NET和本机代码的特殊效果.
我知道WPF是未来(目前),Windows Forms正在放慢成为一种被弃用的技术.
我曾经尝试过学习WPF和XAML,但是我遇到了WPF的新设计师......与Windows Forms设计师相比,它似乎很难使用...当然......这只是一个学习曲线,在某些时候,我打算继续学习WPF.
与此同时,我想知道.NET的WPF设计器是否有更适合Windows Forms开发人员的替代方案?
可能重复:
原型如何在打字稿上扩展?
我目前正在学习TypeScript,并想知道如何向现有对象添加功能.假设我想为String对象添加Foo的实现.在JavaScript中我会这样做:
String.prototype.Foo = function() {
// DO THIS...
}
Run Code Online (Sandbox Code Playgroud)
理解TypeScript类,接口和模块是开放式的,这使我尝试以下方法,但没有成功
1.从TypeScript引用JavaScript实现
JavaScript:
String.prototype.Foo = function() {
// DO THIS...
}
TypeScript:
var x = "Hello World";
x.Foo(); //ERROR, Method does not exist
Run Code Online (Sandbox Code Playgroud)
2.扩展界面
interface String {
Foo(): number;
}
var x = "Hello World";
x.Foo(); //Exists but no implementation.
Run Code Online (Sandbox Code Playgroud)
3.扩展课程
class String {
Foo(): number {
return 0;
}
}
// ERROR: Duplicate identifier 'String'
Run Code Online (Sandbox Code Playgroud)
从这些结果可以看出,到目前为止,我已经能够通过接口契约添加方法,但没有实现,因此,如何定义和实现我的Foo方法作为预先存在的String类的一部分?
我最近讨论了依赖性倒置原则,控制反转和依赖注入.关于这个主题,我们一直在争论这些原则是否违反了OOP的一个支柱,即封装.
我对这些事情的理解是:
辩论与以下声明达成了共识:
IoC不是OOP,因为它打破了封装
就个人而言,我认为所有OOP开发人员应该虔诚地遵守依赖倒置原则和控制反转模式 - 我遵循以下引用:
如果有(可能)不止一种方法给猫皮肤,那么就不要 表现得像只有一只猫.
例1:
class Program {
void Main() {
SkinCatWithKnife skinner = new SkinCatWithKnife ();
skinner.SkinTheCat();
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们看到封装的一个例子.程序员只需要打电话Main()
,猫就会被剥皮,但是如果他想给猫咪涂上一层锋利的牙齿呢?
例2:
class Program {
// Encapsulation
ICatSkinner skinner;
public Program(ICatSkinner skinner) {
// Inversion of control
this.skinner = skinner;
}
void Main() {
this.skinner.SkinTheCat();
}
}
... new Program(new SkinCatWithTeeth());
// Dependency Injection
Run Code Online (Sandbox Code Playgroud)
在这里,我们观察依赖性反转原理和控制反转,因为提供了abstract( …
oop encapsulation design-patterns inversion-of-control solid-principles
考虑以下代码:
Console.WriteLine("Hello, World!".GetHashCode());
Run Code Online (Sandbox Code Playgroud)
第一次运行:
139068974
第二次运行:
-263623806
现在考虑用 Kotlin 编写的相同内容:
println("Hello, World!".hashCode())
Run Code Online (Sandbox Code Playgroud)
第一次运行:
1498789909
第二次运行:
1498789909
为什么string
.NET 中的每次执行的哈希码都会发生变化,但在其他运行时(如 JVM)上却不会发生变化?
我正在尝试编写一个包含一些重载方法的C++类:
class Output
{
public:
static void Print(bool value)
{
std::cout << value ? "True" : "False";
}
static void Print(std::string value)
{
std::cout << value;
}
};
Run Code Online (Sandbox Code Playgroud)
现在让我说我调用方法如下:
Output::Print("Hello World");
Run Code Online (Sandbox Code Playgroud)
结果就是这样
真正
那么,为什么,当我定义该方法可以接受布尔值和字符串时,当我传入一个非布尔值时,它是否使用布尔重载?
编辑:我来自C#/ Java环境,对C++来说还是新手!
好的,所以我正在努力学习JavaScript,以便我可以编写好的,干净的客户端代码,但每当我认为我正在取得进展时,有些东西会让我陷入困境!
我想知道:
JavaScript,ECMAScript和JScript有什么不同?
我应该把重点放在学习上?
如果这些是版本化的,我应该支持哪个版本?
是否有必要/读取的真正好的参考(网络/书籍等)?
我如何确保我所写的内容符合所有主流浏览器(IE,FF,Safari,Chrome,Opera等)?
最重要的......是否有核心对象(数组,数字等)的参考,所以我知道已经实现了什么以及我自己需要做什么?
谢谢.
在JavaScript中,我可以通过以下方式声明字符串;
var a = "Hello World";
var b = new String("Hello World");
Run Code Online (Sandbox Code Playgroud)
但是a不是String的实例......
console.log(a instanceof String); //false;
console.log(b instanceof String); //true;
Run Code Online (Sandbox Code Playgroud)
那么如何找到类型或" instanceof
"字符串文字?
可以强制JavaScript new String()
为每个字符串文字创建一个?
关于这个问题:" 删除未使用的引用(!="using") ",我想知道是否有一个工具可以从Visual Studio解决方案中删除未使用的类,结构,委托等.
场景:
我有一个无组织的Visual Studio解决方案,包含1000个:
而不是拖动每个文件点击"查找所有引用"并确定代码是否在某处使用,是否有任何机制可以轻松删除冗余代码文件?
例:
//This class contains a method called getRandomValue which returns type RANDOM
public class NativeMethods
{
[DllImport("random.dll")]
public static extern RANDOM getRandomValue();
}
//This is the RANDOM object as referenced by getRandomValue();
[StructLayout(LayoutKind.Sequential)]
public struct RANDOM
{
uint a;
uint b;
uint c;
}
//This is redundant since nothing is referencing it.
[StructLayout(LayoutKind.Sequential)]
public struct MESSAGE
{
IntPtr sender;
IntPtr recipient;
char[] mText;
}
Run Code Online (Sandbox Code Playgroud)
注意自我:
我的直觉是,这将是棘手的,因为与Java不同,对象名称不必与文件名相同,并且多个对象声明可以驻留在单个文件中,但是在这个实例中(我的场景)每个对象都是在其自己的文件中声明(具有相同的名称).
我目前正在开发TypeScript API,它需要一些绑定到Object原型(Object.prototype)的附加功能.
请考虑以下代码:
class Foo {
}
interface Object {
GetFoo(): Foo;
GetFooAsString(): string;
}
//This is problematic...
Object.prototype.GetFoo = function() {
return new Foo();
// Note, this line is just for testing...I don't want my function to just return a blank instance of Foo!
}
//This is ok.
Object.prototype.GetFooAsString = function () {
return this.GetFoo().toString();
}
Run Code Online (Sandbox Code Playgroud)
您可能想直接在Playground尝试这个.
如你所见,我有一个叫做的类Foo
(不是我将要使用的实际对象名).我还扩展了Object
界面以包含两个新功能.最后我实现了针对prototype
这些功能(这些工作在纯JavaScript中,它只是抱怨的TypeScript).
我在其中注释" //这是有问题的...... "TypeScript用红色波浪形突出显示,并显示以下错误:
Cannot convert '() => Foo' to '{ (): Foo; (): …
Run Code Online (Sandbox Code Playgroud) javascript ×4
c# ×3
string ×2
typescript ×2
.net ×1
boolean ×1
c++ ×1
code-cleanup ×1
gethashcode ×1
hashcode ×1
instanceof ×1
interface ×1
jscript ×1
object ×1
oop ×1
overloading ×1
prototype ×1
windows ×1
winforms ×1
wpf ×1