Facebook的用户体验优缺点
Facebook的产品设计五维
情感
精准定位设计对受众定位清晰,符合该设计目标用户群的使用体验。
亲和力所有交互元素的设计上,用户对信息沟通顺畅,感觉似有人一般的亲和感。
分享承载对Facebook连接、自由、生活的文化认同。
留恋度给人超出想象的空间,让人留恋往返,对产品期待更多,得到二次访问。
认识自己的无知 是认识世界最可靠的方法
Facebook的产品设计五维
情感
精准定位设计对受众定位清晰,符合该设计目标用户群的使用体验。
亲和力所有交互元素的设计上,用户对信息沟通顺畅,感觉似有人一般的亲和感。
分享承载对Facebook连接、自由、生活的文化认同。
留恋度给人超出想象的空间,让人留恋往返,对产品期待更多,得到二次访问。
<p>先获取光标的位置,以下是我js获取光标的位置(text为要插入的文字,如图片或是表情):</p><p>var textBox = document.getElementById(field);
textBox.focus();
if(document.selection==null){
var iStart = textBox.selectionStart;
var iEnd = textBox.selectionEnd;
sText= textBox.value.substring(iStart, iEnd)
textBox.value = textBox.value.substring(0, iStart) + text + textBox.value.substring(iEnd, textBox.value.length);
//设置光标
var pos = iEnd + text.length;
if(textBox.setSelectionRange){
textBox.focus();
textBox.setSelectionRange(pos,pos);
}else if (textBox.createTextRange) {
var range = textBox.createTextRange();
range.moveStart('character', iStart);
range.moveEnd('character', -iEnd);
range.collapse(true);
range.select();
}
}else{
document.selection.createRange().text += text;
}
var text = $("#"+field).val(); //此处的text为插入文字后的所有文字,然后将text赋值到编辑器就ok了</p>
在C#中一维数组的表示与在java中相同,可是二维或以上的数组却有所差异,以下作说明。
我们知道在Java中二维数组的表示例子如下:int[][] a = new int3; //数组是表示3行4列
不过在c#中二维数组的表示例子如下:int[,] a = new int[3,4]; //数组是表示3行4列
而如果写成的是java的形式则变成是数组的数组,例子如下:
<p>命名空间使用的关键字是namespace,命名空间可以互相嵌套</p><p>使用命名空间的好处:</p><p>1. 代码可分布在多个文件中,也就是拥有相同的命名空间可以分步在不同的文件当中</p><p>2. 命名空间具有扩展性,例子:</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p> 在C#中可以把类库编译成dll文件从而让程序调用,方法如下,在windows命令行下输入,csc /target:library "需要转为dll文件的cs文件的文件名".cs;把dll文件与主文件进行关联,csc /reference:"dll文件名".dll "主程序的cs文件名".cs;如果dll文件需要改动则需要重新进行红色部分操作,但不需要再次关联,就是不需要执行蓝色部分操作,即可运行。</p><p>3. 可以堆砌出层次式的类组织结构,例子: </p><p>namespace A{</p><p> namespace A1{}</p><p>namespace A2{} </p><p>} </p><p> 使用的使用需要使用全称名字如,A.A1</p><p> </p><p>再说一下别名(Alias) ,别名就是可以让你对一个复杂的命名空间,例如using A.A1.A2.A3;简单的转化为using B = A.A1.A2.A3;即可。</p>
<p>C#没有了全局变量的概念,我们只能通过static来共享变量。</p><p>如何传入引用变量,例子:</p><p>函数的声明需要有ref关键字:public static void a(ref int i){} </p><p>函数的调用也需要有ref关键字:a(ref 4); </p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>带输出参数的方法,例子:</p><p>函数的声明需要有out关键字,参数需要在这函数里面初始化:public static void b(out int i){}</p><p>函数的调用也需要有out关键字:b(out 4); </p><p> </p><p>在C#中调用ref与调用out的效果一样,不同是他们初始化的时间不同,ref需要在调用之前赋值,然而out需要在调用方法中赋值。 </p><p> </p><p>为了将方法声明为可以接受可变数量参数的方法,使用params关键字,例子如下:</p><p>声明方法:static int addi(params int[] values){}//必须是数组类型 </p><p>调用时:addi(1,2,3); </p><p> </p><p>字符串string也是引用类型,但是为什么结果却是值传递的呢?</p><p>因为字符串从赋值起就是固定的,不能修改内容与长度,所以在传值的时候是创建了一个副本来进行操作。</p>
<p>//构造器的名称必须与类名相同,且没有返回值</p><p>class A : Object{//这表示类A继承Object</p><p> public A() : base(){}//这表示引用的是父类Object的构造函数</p><p>}</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>//this的概念不是类本身,而是表示类创建后的实例 </p><p> </p><p>// 调用无参构造函数</p><p>class B{
public B(){}</p><p>public B(int i) : this() {}//:this()表示首先调用B的无参构造函数</p><p>public B(string s) : this(){} //:this()表示首先调用B的无参构造函数</p><p>}</p><p> </p><p>//如果类B继承于类A,那么类B会默认调用类A的无参构造器,要是类A有包含参数的构造器,那么必须在类A显示编写一个无参的构造器 </p><p> </p><p>//如果类B需要调用类A的有参数的构造器,需要如下:</p><p> class A{</p><p>public A(){}</p><p>public A(int i){} </p><p>}</p><p> </p><p>class B : A{
public B() : base(3){}//调用类A的有参构造器</p><p>}</p><p> </p><p>静态构造器: 静态构造函数是实现对一个类进行初始化的方法成员。它一般用于对静态数据的初始化。静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。</p><p> 主要作用:对类的静态成员进行初始化</p><p> 注意:</p><p>1. 在一个程序的执行过程中,静态构造器最多只执行一次</p><p>2. 静态构造器在类的静态成员初始化之后执行</p><p>3. 静态构造器在任何类的静态成员被引用之前执行 </p><p>4. 静态构造器在任何类的实例变量被分配之前执行 </p><p>class A{
static A(){}//静态构造器</p><p>}</p>
<p>C#之访问控制修饰符分为6种,他们可以使用的范围如下:</p><p>1. default:类内部</p><p>2. public: 类内部程序集内子类程序集外</p><p>3. private: 类内部</p><p>4. interval: 类内部程序集内子类</p><p>5. protected: 类内部</p><p>6. protected interval: 类内部程序集内子类</p><p> *interval与protected interval的区别:interval不可以访问在不同程序集类 子类访问父类</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p> </p><p>类的特有的访问控制修饰符:</p><p>sealed: 不能被继承的类 </p><p> partial: 可以声明在不同文件中的统一个类</p>
<p>int a = 7;</p><p>long b;</p><p>b = a;//隐式转换成功,说明低位的可以转换为高位</p><p>a = b;//隐式转换不成功,说明高位的不可以转换为低位</p><p>a = (int)b;//需要使用到显示转换,而且有可能会发生溢出的可怕效果,而且C#不会自动检查溢出</p><p>a = checked((int)b)//使用checked 手动让程序检查溢出,或者使用checked{}检查语句块 , unchecked{}表示允许这些程序内容溢出</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>如下的程况是特殊程况:</p><p>Byte b = 100;</p><p>//b = b + 100;//需要显示转换,不然跑错,不过这种方法 b+=100; 就可以顺利运行</p><p>b = (Byte)(b+10); </p><p>Console.write(b);</p>