JFrame,JApplet,JDialog都是顶层容器即最大的容器,所以应该不能嵌套在JFrame容器中的,JFrame容器应该只能嵌套比它小的容器或组件,如普通容器JPanel,JScrollPane等容器才能嵌套在JFrame容器中。
package zhidao;
public abstract class Sensor extends Thread
{
public static void main ( String[] args )
{
Sensor sensor = new Sensor (""){};
DaySensor daySensor = sensornew DaySensor ("daySensor");
TemperatureSensor tSensor = sensornew TemperatureSensor ("tSensor");
LocationSensor locationSensor = sensornew LocationSensor ("locationSensor");
HRBPSensor hSensor = sensornew HRBPSensor ("hSensor");
WaterSensor waterSensor = sensornew WaterSensor ("waterSensor");
daySensorstart ();
tSensorstart ();
locationSensorstart ();
hSensorstart ();
waterSensorstart ();
}
// 构造函数
protected Sensor ( String dataSrc )
{
thissetName (dataSrc);
thissetPriority (ThreadMIN_PRIORITY);
}
public void run ()
{
Thread thread = null;
try
{
while (null != ( thread = ThreadcurrentThread () ))
{
String name = threadgetName ();
if ("daySensor"equals (name))
{
threadinterrupt ();
thread = null;
Systemoutprintln ("I am daySensor");
}
else if ("tSensor"equals (name))
{
threadinterrupt ();
thread = null;
Systemoutprintln ("I am tSensor");
}
else if ("locationSensor"equals (name))
{
threadinterrupt ();
thread = null;
Systemoutprintln ("I am locationSensor");
}
else if ("hSensor"equals (name))
{
threadinterrupt ();
thread = null;
Systemoutprintln ("I am hSensor");
}
else if ("waterSensor"equals (name))
{
threadinterrupt ();
thread = null;
Systemoutprintln ("I am waterSensor");
}
Threadsleep (2000);
}
}
catch (InterruptedException e)
{}
}
private void publishData ()
{}
// 下面是5个sensor
public class DaySensor extends Sensor
{
protected DaySensor ( String dataSrc )
{
super (dataSrc);
}
}
public class TemperatureSensor extends Sensor
{
// 重写 publishData()
private void publishData ()
{}
protected TemperatureSensor ( String dataSrc )
{
super (dataSrc);
}
}
public class LocationSensor extends Sensor
{
protected LocationSensor ( String dataSrc )
{
super (dataSrc);
}
}
public class HRBPSensor extends Sensor
{
protected HRBPSensor ( String dataSrc )
{
super (dataSrc);
}
}
public class WaterSensor extends Sensor
{
protected WaterSensor ( String dataSrc )
{
super (dataSrc);
}
}
}
学生类(BKstu)的两个构造函数的函数名错了,应该将“stu”改为“BKstu”。
无参构造函数没有定义体,可以将
stu();
改为
stu(){ };
3如果使用标准名字空间,重载<<和>>运算符的函数,好像还要提前声明。
这个是比较考验C#技术的问题,我写了一个非常简单的实现示例,但BsonDocument的实现明显复杂很多,由于是闭源的,也许可以从反编译看到其具体实现:
class Program{
static void Main(string[] args)
{
MyClass myClass = new MyClass
{
{ "a","11" },
{ "b","22" }
};
foreach (var kv in myClass)
{
ConsoleWriteLine("{0}={1}\n", kvKey, kvValue);
}
ConsoleReadKey();
}
}
public class MyClass : IEnumerable<KeyValuePair<string, string>>
{
public Dictionary<string, string> mydata;
public MyClass()
{
thismydata = new Dictionary<string, string>();
}
public string this[string k]
{
get { return mydata[k]; }
set { mydata[k] = value; }
}
public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
{
return thismydataGetEnumerator();
}
IEnumerator IEnumerableGetEnumerator()
{
return thismydataGetEnumerator();
}
public void Add(string k, string v)
{
thismydataAdd(k, v);
}
}
上图中 outer 是在变量环境里面的,为了方便看
全局执行上下文中的 this:
函数中的this:
那能不能设置执行上下文中的 this 来指向其他对象呢? 肯定是可以的
1、通过函数的 call 方法设置:
2、通过对象调用方法设置:
3 通过构造函数中设置:
嵌套函数中的 this 不会从外层函数中继承
那怎么实现 bar 的this指向外层 myObj 呢?
本质是把 this 体系转换为了作用域的体系 。也可以使用 ES6 中的箭头函数来解决这个问题
因为 ES6 中的箭头函数并不会创建其自身的执行上下文,所以箭头函数中的 this 取决于它的外部函数
1、this 指向不同:
①:函数call(对象,arg1,arg2)
②:函数apply(对象,[arg1,arg2,])
③:var ss=函数bind(对象,arg1,arg2,)
2、箭头函数没有原型,
3、箭头函数不能绑定arguments,取而代之用rest参数解决
4、箭头函数是匿名函数,不能作为构造函数,不能使用new
5、箭头函数不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。
6、 函数体内的this对象(继承的),就是定义时所在的对象,而不是使用时所在的对象。
如何实现 call 和apply?
bind的实现原理比call和apply要复杂一些,bind中需要考虑一些复杂的边界条件。bind后的函数会返回一个函数,而这个函数也可能被用来实例化:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)